1686 lines
149 KiB
HTML
1686 lines
149 KiB
HTML
|
|
|
|
<!DOCTYPE html>
|
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
|
<head>
|
|
<meta charset="utf-8">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
<title>terminatorlib.configobj.validate — terminatorlib 0.98 documentation</title>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="top" title="terminatorlib 0.98 documentation" href="../../../index.html"/>
|
|
<link rel="up" title="Module code" href="../../index.html"/>
|
|
|
|
|
|
<script src="_static/js/modernizr.min.js"></script>
|
|
|
|
</head>
|
|
|
|
<body class="wy-body-for-nav" role="document">
|
|
|
|
<div class="wy-grid-for-nav">
|
|
|
|
|
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|
<div class="wy-side-nav-search">
|
|
|
|
|
|
|
|
<a href="../../../index.html" class="icon icon-home"> terminatorlib
|
|
|
|
|
|
|
|
</a>
|
|
|
|
|
|
<div role="search">
|
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
|
<input type="text" name="q" placeholder="Search docs" />
|
|
<input type="hidden" name="check_keywords" value="yes" />
|
|
<input type="hidden" name="area" value="default" />
|
|
</form>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
|
|
|
|
|
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="../../../terminatorlib.html">terminatorlib package</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#subpackages">Subpackages</a><ul>
|
|
<li class="toctree-l3"><a class="reference internal" href="../../../terminatorlib.configobj.html">terminatorlib.configobj package</a><ul>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../../terminatorlib.configobj.html#submodules">Submodules</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../../terminatorlib.configobj.html#module-terminatorlib.configobj.configobj">terminatorlib.configobj.configobj module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../../terminatorlib.configobj.html#module-terminatorlib.configobj.validate">terminatorlib.configobj.validate module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../../terminatorlib.configobj.html#module-terminatorlib.configobj">Module contents</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l3"><a class="reference internal" href="../../../terminatorlib.plugins.html">terminatorlib.plugins package</a><ul>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../../terminatorlib.plugins.html#submodules">Submodules</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../../terminatorlib.plugins.html#module-terminatorlib.plugins.activitywatch">terminatorlib.plugins.activitywatch module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../../terminatorlib.plugins.html#module-terminatorlib.plugins.custom_commands">terminatorlib.plugins.custom_commands module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../../terminatorlib.plugins.html#module-terminatorlib.plugins.logger">terminatorlib.plugins.logger module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../../terminatorlib.plugins.html#module-terminatorlib.plugins.maven">terminatorlib.plugins.maven module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../../terminatorlib.plugins.html#module-terminatorlib.plugins.terminalshot">terminatorlib.plugins.terminalshot module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../../terminatorlib.plugins.html#module-terminatorlib.plugins.testplugin">terminatorlib.plugins.testplugin module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../../terminatorlib.plugins.html#module-terminatorlib.plugins.url_handlers">terminatorlib.plugins.url_handlers module</a></li>
|
|
<li class="toctree-l4"><a class="reference internal" href="../../../terminatorlib.plugins.html#module-terminatorlib.plugins">Module contents</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#submodules">Submodules</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.borg">terminatorlib.borg module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.config">terminatorlib.config module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.container">terminatorlib.container module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.cwd">terminatorlib.cwd module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.debugserver">terminatorlib.debugserver module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.editablelabel">terminatorlib.editablelabel module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.encoding">terminatorlib.encoding module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.factory">terminatorlib.factory module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.freebsd">terminatorlib.freebsd module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.ipc">terminatorlib.ipc module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.keybindings">terminatorlib.keybindings module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.layoutlauncher">terminatorlib.layoutlauncher module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.notebook">terminatorlib.notebook module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.optionparse">terminatorlib.optionparse module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.paned">terminatorlib.paned module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.plugin">terminatorlib.plugin module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.prefseditor">terminatorlib.prefseditor module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.searchbar">terminatorlib.searchbar module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.signalman">terminatorlib.signalman module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.terminal">terminatorlib.terminal module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.terminal_popup_menu">terminatorlib.terminal_popup_menu module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.terminator">terminatorlib.terminator module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.titlebar">terminatorlib.titlebar module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.translation">terminatorlib.translation module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.util">terminatorlib.util module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.version">terminatorlib.version module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib.window">terminatorlib.window module</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="../../../terminatorlib.html#module-terminatorlib">Module contents</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
|
|
|
|
|
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
|
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
<a href="../../../index.html">terminatorlib</a>
|
|
</nav>
|
|
|
|
|
|
|
|
<div class="wy-nav-content">
|
|
<div class="rst-content">
|
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
|
<ul class="wy-breadcrumbs">
|
|
<li><a href="../../../index.html">Docs</a> »</li>
|
|
|
|
<li><a href="../../index.html">Module code</a> »</li>
|
|
|
|
<li>terminatorlib.configobj.validate</li>
|
|
<li class="wy-breadcrumbs-aside">
|
|
|
|
|
|
|
|
</li>
|
|
</ul>
|
|
<hr/>
|
|
</div>
|
|
<div role="main" class="document">
|
|
|
|
<h1>Source code for terminatorlib.configobj.validate</h1><div class="highlight"><pre>
|
|
<span class="c"># validate.py</span>
|
|
<span class="c"># A Validator object</span>
|
|
<span class="c"># Copyright (C) 2005-2010 Michael Foord, Mark Andrews, Nicola Larosa</span>
|
|
<span class="c"># E-mail: fuzzyman AT voidspace DOT org DOT uk</span>
|
|
<span class="c"># mark AT la-la DOT com</span>
|
|
<span class="c"># nico AT tekNico DOT net</span>
|
|
|
|
<span class="c"># This software is licensed under the terms of the BSD license.</span>
|
|
<span class="c"># http://www.voidspace.org.uk/python/license.shtml</span>
|
|
<span class="c"># Basically you're free to copy, modify, distribute and relicense it,</span>
|
|
<span class="c"># So long as you keep a copy of the license with it.</span>
|
|
|
|
<span class="c"># Scripts maintained at http://www.voidspace.org.uk/python/index.shtml</span>
|
|
<span class="c"># For information about bugfixes, updates and support, please join the</span>
|
|
<span class="c"># ConfigObj mailing list:</span>
|
|
<span class="c"># http://lists.sourceforge.net/lists/listinfo/configobj-develop</span>
|
|
<span class="c"># Comments, suggestions and bug reports welcome.</span>
|
|
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> The Validator object is used to check that supplied values </span>
|
|
<span class="sd"> conform to a specification.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> The value can be supplied as a string - e.g. from a config file.</span>
|
|
<span class="sd"> In this case the check will also *convert* the value to</span>
|
|
<span class="sd"> the required type. This allows you to add validation</span>
|
|
<span class="sd"> as a transparent layer to access data stored as strings.</span>
|
|
<span class="sd"> The validation checks that the data is correct *and*</span>
|
|
<span class="sd"> converts it to the expected type.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Some standard checks are provided for basic data types.</span>
|
|
<span class="sd"> Additional checks are easy to write. They can be</span>
|
|
<span class="sd"> provided when the ``Validator`` is instantiated or</span>
|
|
<span class="sd"> added afterwards.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> The standard functions work with the following basic data types :</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * integers</span>
|
|
<span class="sd"> * floats</span>
|
|
<span class="sd"> * booleans</span>
|
|
<span class="sd"> * strings</span>
|
|
<span class="sd"> * ip_addr</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> plus lists of these datatypes</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Adding additional checks is done through coding simple functions.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> The full set of standard checks are : </span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * 'integer': matches integer values (including negative)</span>
|
|
<span class="sd"> Takes optional 'min' and 'max' arguments : ::</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> integer()</span>
|
|
<span class="sd"> integer(3, 9) # any value from 3 to 9</span>
|
|
<span class="sd"> integer(min=0) # any positive value</span>
|
|
<span class="sd"> integer(max=9)</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * 'float': matches float values</span>
|
|
<span class="sd"> Has the same parameters as the integer check.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * 'boolean': matches boolean values - ``True`` or ``False``</span>
|
|
<span class="sd"> Acceptable string values for True are :</span>
|
|
<span class="sd"> true, on, yes, 1</span>
|
|
<span class="sd"> Acceptable string values for False are :</span>
|
|
<span class="sd"> false, off, no, 0</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Any other value raises an error.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * 'ip_addr': matches an Internet Protocol address, v.4, represented</span>
|
|
<span class="sd"> by a dotted-quad string, i.e. '1.2.3.4'.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * 'string': matches any string.</span>
|
|
<span class="sd"> Takes optional keyword args 'min' and 'max'</span>
|
|
<span class="sd"> to specify min and max lengths of the string.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * 'list': matches any list.</span>
|
|
<span class="sd"> Takes optional keyword args 'min', and 'max' to specify min and</span>
|
|
<span class="sd"> max sizes of the list. (Always returns a list.)</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * 'tuple': matches any tuple.</span>
|
|
<span class="sd"> Takes optional keyword args 'min', and 'max' to specify min and</span>
|
|
<span class="sd"> max sizes of the tuple. (Always returns a tuple.)</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * 'int_list': Matches a list of integers.</span>
|
|
<span class="sd"> Takes the same arguments as list.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * 'float_list': Matches a list of floats.</span>
|
|
<span class="sd"> Takes the same arguments as list.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * 'bool_list': Matches a list of boolean values.</span>
|
|
<span class="sd"> Takes the same arguments as list.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * 'ip_addr_list': Matches a list of IP addresses.</span>
|
|
<span class="sd"> Takes the same arguments as list.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * 'string_list': Matches a list of strings.</span>
|
|
<span class="sd"> Takes the same arguments as list.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * 'mixed_list': Matches a list with different types in </span>
|
|
<span class="sd"> specific positions. List size must match</span>
|
|
<span class="sd"> the number of arguments.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Each position can be one of :</span>
|
|
<span class="sd"> 'integer', 'float', 'ip_addr', 'string', 'boolean'</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> So to specify a list with two strings followed</span>
|
|
<span class="sd"> by two integers, you write the check as : ::</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> mixed_list('string', 'string', 'integer', 'integer')</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * 'pass': This check matches everything ! It never fails</span>
|
|
<span class="sd"> and the value is unchanged.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> It is also the default if no check is specified.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> * 'option': This check matches any from a list of options.</span>
|
|
<span class="sd"> You specify this check with : ::</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> option('option 1', 'option 2', 'option 3')</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> You can supply a default value (returned if no value is supplied)</span>
|
|
<span class="sd"> using the default keyword argument.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> You specify a list argument for default using a list constructor syntax in</span>
|
|
<span class="sd"> the check : ::</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> checkname(arg1, arg2, default=list('val 1', 'val 2', 'val 3'))</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> A badly formatted set of arguments will raise a ``VdtParamError``.</span>
|
|
<span class="sd">"""</span>
|
|
|
|
<span class="n">__version__</span> <span class="o">=</span> <span class="s">'1.0.1'</span>
|
|
|
|
|
|
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s">'__version__'</span><span class="p">,</span>
|
|
<span class="s">'dottedQuadToNum'</span><span class="p">,</span>
|
|
<span class="s">'numToDottedQuad'</span><span class="p">,</span>
|
|
<span class="s">'ValidateError'</span><span class="p">,</span>
|
|
<span class="s">'VdtUnknownCheckError'</span><span class="p">,</span>
|
|
<span class="s">'VdtParamError'</span><span class="p">,</span>
|
|
<span class="s">'VdtTypeError'</span><span class="p">,</span>
|
|
<span class="s">'VdtValueError'</span><span class="p">,</span>
|
|
<span class="s">'VdtValueTooSmallError'</span><span class="p">,</span>
|
|
<span class="s">'VdtValueTooBigError'</span><span class="p">,</span>
|
|
<span class="s">'VdtValueTooShortError'</span><span class="p">,</span>
|
|
<span class="s">'VdtValueTooLongError'</span><span class="p">,</span>
|
|
<span class="s">'VdtMissingValue'</span><span class="p">,</span>
|
|
<span class="s">'Validator'</span><span class="p">,</span>
|
|
<span class="s">'is_integer'</span><span class="p">,</span>
|
|
<span class="s">'is_float'</span><span class="p">,</span>
|
|
<span class="s">'is_boolean'</span><span class="p">,</span>
|
|
<span class="s">'is_list'</span><span class="p">,</span>
|
|
<span class="s">'is_tuple'</span><span class="p">,</span>
|
|
<span class="s">'is_ip_addr'</span><span class="p">,</span>
|
|
<span class="s">'is_string'</span><span class="p">,</span>
|
|
<span class="s">'is_int_list'</span><span class="p">,</span>
|
|
<span class="s">'is_bool_list'</span><span class="p">,</span>
|
|
<span class="s">'is_float_list'</span><span class="p">,</span>
|
|
<span class="s">'is_string_list'</span><span class="p">,</span>
|
|
<span class="s">'is_ip_addr_list'</span><span class="p">,</span>
|
|
<span class="s">'is_mixed_list'</span><span class="p">,</span>
|
|
<span class="s">'is_option'</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
|
|
<span class="kn">import</span> <span class="nn">re</span>
|
|
|
|
|
|
<span class="n">_list_arg</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="s">r'''</span>
|
|
<span class="s"> (?:</span>
|
|
<span class="s"> ([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*list\(</span>
|
|
<span class="s"> (</span>
|
|
<span class="s"> (?:</span>
|
|
<span class="s"> \s*</span>
|
|
<span class="s"> (?:</span>
|
|
<span class="s"> (?:".*?")| # double quotes</span>
|
|
<span class="s"> (?:'.*?')| # single quotes</span>
|
|
<span class="s"> (?:[^'",\s\)][^,\)]*?) # unquoted</span>
|
|
<span class="s"> )</span>
|
|
<span class="s"> \s*,\s*</span>
|
|
<span class="s"> )*</span>
|
|
<span class="s"> (?:</span>
|
|
<span class="s"> (?:".*?")| # double quotes</span>
|
|
<span class="s"> (?:'.*?')| # single quotes</span>
|
|
<span class="s"> (?:[^'",\s\)][^,\)]*?) # unquoted</span>
|
|
<span class="s"> )? # last one</span>
|
|
<span class="s"> )</span>
|
|
<span class="s"> \)</span>
|
|
<span class="s"> )</span>
|
|
<span class="s">'''</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">VERBOSE</span> <span class="o">|</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span><span class="p">)</span> <span class="c"># two groups</span>
|
|
|
|
<span class="n">_list_members</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="s">r'''</span>
|
|
<span class="s"> (</span>
|
|
<span class="s"> (?:".*?")| # double quotes</span>
|
|
<span class="s"> (?:'.*?')| # single quotes</span>
|
|
<span class="s"> (?:[^'",\s=][^,=]*?) # unquoted</span>
|
|
<span class="s"> )</span>
|
|
<span class="s"> (?:</span>
|
|
<span class="s"> (?:\s*,\s*)|(?:\s*$) # comma</span>
|
|
<span class="s"> )</span>
|
|
<span class="s">'''</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">VERBOSE</span> <span class="o">|</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span><span class="p">)</span> <span class="c"># one group</span>
|
|
|
|
<span class="n">_paramstring</span> <span class="o">=</span> <span class="s">r'''</span>
|
|
<span class="s"> (?:</span>
|
|
<span class="s"> (</span>
|
|
<span class="s"> (?:</span>
|
|
<span class="s"> [a-zA-Z_][a-zA-Z0-9_]*\s*=\s*list\(</span>
|
|
<span class="s"> (?:</span>
|
|
<span class="s"> \s*</span>
|
|
<span class="s"> (?:</span>
|
|
<span class="s"> (?:".*?")| # double quotes</span>
|
|
<span class="s"> (?:'.*?')| # single quotes</span>
|
|
<span class="s"> (?:[^'",\s\)][^,\)]*?) # unquoted</span>
|
|
<span class="s"> )</span>
|
|
<span class="s"> \s*,\s*</span>
|
|
<span class="s"> )*</span>
|
|
<span class="s"> (?:</span>
|
|
<span class="s"> (?:".*?")| # double quotes</span>
|
|
<span class="s"> (?:'.*?')| # single quotes</span>
|
|
<span class="s"> (?:[^'",\s\)][^,\)]*?) # unquoted</span>
|
|
<span class="s"> )? # last one</span>
|
|
<span class="s"> \)</span>
|
|
<span class="s"> )|</span>
|
|
<span class="s"> (?:</span>
|
|
<span class="s"> (?:".*?")| # double quotes</span>
|
|
<span class="s"> (?:'.*?')| # single quotes</span>
|
|
<span class="s"> (?:[^'",\s=][^,=]*?)| # unquoted</span>
|
|
<span class="s"> (?: # keyword argument</span>
|
|
<span class="s"> [a-zA-Z_][a-zA-Z0-9_]*\s*=\s*</span>
|
|
<span class="s"> (?:</span>
|
|
<span class="s"> (?:".*?")| # double quotes</span>
|
|
<span class="s"> (?:'.*?')| # single quotes</span>
|
|
<span class="s"> (?:[^'",\s=][^,=]*?) # unquoted</span>
|
|
<span class="s"> )</span>
|
|
<span class="s"> )</span>
|
|
<span class="s"> )</span>
|
|
<span class="s"> )</span>
|
|
<span class="s"> (?:</span>
|
|
<span class="s"> (?:\s*,\s*)|(?:\s*$) # comma</span>
|
|
<span class="s"> )</span>
|
|
<span class="s"> )</span>
|
|
<span class="s"> '''</span>
|
|
|
|
<span class="n">_matchstring</span> <span class="o">=</span> <span class="s">'^</span><span class="si">%s</span><span class="s">*'</span> <span class="o">%</span> <span class="n">_paramstring</span>
|
|
|
|
<span class="c"># Python pre 2.2.1 doesn't have bool</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="nb">bool</span>
|
|
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span>
|
|
<span class="k">def</span> <span class="nf">bool</span><span class="p">(</span><span class="n">val</span><span class="p">):</span>
|
|
<span class="sd">"""Simple boolean equivalent function. """</span>
|
|
<span class="k">if</span> <span class="n">val</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="mi">1</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="mi">0</span>
|
|
|
|
|
|
<div class="viewcode-block" id="dottedQuadToNum"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.dottedQuadToNum">[docs]</a><span class="k">def</span> <span class="nf">dottedQuadToNum</span><span class="p">(</span><span class="n">ip</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Convert decimal dotted quad string to long integer</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> int(dottedQuadToNum('1 '))</span>
|
|
<span class="sd"> 1</span>
|
|
<span class="sd"> >>> int(dottedQuadToNum(' 1.2'))</span>
|
|
<span class="sd"> 16777218</span>
|
|
<span class="sd"> >>> int(dottedQuadToNum(' 1.2.3 '))</span>
|
|
<span class="sd"> 16908291</span>
|
|
<span class="sd"> >>> int(dottedQuadToNum('1.2.3.4'))</span>
|
|
<span class="sd"> 16909060</span>
|
|
<span class="sd"> >>> dottedQuadToNum('1.2.3. 4')</span>
|
|
<span class="sd"> 16909060</span>
|
|
<span class="sd"> >>> dottedQuadToNum('255.255.255.255')</span>
|
|
<span class="sd"> 4294967295L</span>
|
|
<span class="sd"> >>> dottedQuadToNum('255.255.255.256')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> ValueError: Not a good dotted-quad IP: 255.255.255.256</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="c"># import here to avoid it when ip_addr values are not used</span>
|
|
<span class="kn">import</span> <span class="nn">socket</span><span class="o">,</span> <span class="nn">struct</span>
|
|
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s">'!L'</span><span class="p">,</span>
|
|
<span class="n">socket</span><span class="o">.</span><span class="n">inet_aton</span><span class="p">(</span><span class="n">ip</span><span class="o">.</span><span class="n">strip</span><span class="p">()))[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">except</span> <span class="n">socket</span><span class="o">.</span><span class="n">error</span><span class="p">:</span>
|
|
<span class="c"># bug in inet_aton, corrected in Python 2.3</span>
|
|
<span class="k">if</span> <span class="n">ip</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s">'255.255.255.255'</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="mh">0xFFFFFFFF</span><span class="n">L</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">'Not a good dotted-quad IP: </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">ip</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="numToDottedQuad"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.numToDottedQuad">[docs]</a><span class="k">def</span> <span class="nf">numToDottedQuad</span><span class="p">(</span><span class="n">num</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Convert long int to dotted quad string</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> numToDottedQuad(-1L)</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> ValueError: Not a good numeric IP: -1</span>
|
|
<span class="sd"> >>> numToDottedQuad(1L)</span>
|
|
<span class="sd"> '0.0.0.1'</span>
|
|
<span class="sd"> >>> numToDottedQuad(16777218L)</span>
|
|
<span class="sd"> '1.0.0.2'</span>
|
|
<span class="sd"> >>> numToDottedQuad(16908291L)</span>
|
|
<span class="sd"> '1.2.0.3'</span>
|
|
<span class="sd"> >>> numToDottedQuad(16909060L)</span>
|
|
<span class="sd"> '1.2.3.4'</span>
|
|
<span class="sd"> >>> numToDottedQuad(4294967295L)</span>
|
|
<span class="sd"> '255.255.255.255'</span>
|
|
<span class="sd"> >>> numToDottedQuad(4294967296L)</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> ValueError: Not a good numeric IP: 4294967296</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="c"># import here to avoid it when ip_addr values are not used</span>
|
|
<span class="kn">import</span> <span class="nn">socket</span><span class="o">,</span> <span class="nn">struct</span>
|
|
|
|
<span class="c"># no need to intercept here, 4294967295L is fine</span>
|
|
<span class="k">if</span> <span class="n">num</span> <span class="o">></span> <span class="il">4294967295L</span> <span class="ow">or</span> <span class="n">num</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="s">'Not a good numeric IP: </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">num</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">socket</span><span class="o">.</span><span class="n">inet_ntoa</span><span class="p">(</span>
|
|
<span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s">'!L'</span><span class="p">,</span> <span class="nb">long</span><span class="p">(</span><span class="n">num</span><span class="p">)))</span>
|
|
<span class="k">except</span> <span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">error</span><span class="p">,</span> <span class="n">struct</span><span class="o">.</span><span class="n">error</span><span class="p">,</span> <span class="ne">OverflowError</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">'Not a good numeric IP: </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">num</span><span class="p">)</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="ValidateError"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.ValidateError">[docs]</a><span class="k">class</span> <span class="nc">ValidateError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This error indicates that the check failed.</span>
|
|
<span class="sd"> It can be the base class for more specific errors.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Any check function that fails ought to raise this error.</span>
|
|
<span class="sd"> (or a subclass)</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> raise ValidateError</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> ValidateError</span>
|
|
<span class="sd"> """</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="VdtMissingValue"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtMissingValue">[docs]</a><span class="k">class</span> <span class="nc">VdtMissingValue</span><span class="p">(</span><span class="n">ValidateError</span><span class="p">):</span>
|
|
<span class="sd">"""No value was supplied to a check that needed one."""</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="VdtUnknownCheckError"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtUnknownCheckError">[docs]</a><span class="k">class</span> <span class="nc">VdtUnknownCheckError</span><span class="p">(</span><span class="n">ValidateError</span><span class="p">):</span>
|
|
<span class="sd">"""An unknown check function was requested"""</span>
|
|
|
|
<div class="viewcode-block" id="VdtUnknownCheckError.__init__"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtUnknownCheckError.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> >>> raise VdtUnknownCheckError('yoda')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtUnknownCheckError: the check "yoda" is unknown.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">ValidateError</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">'the check "</span><span class="si">%s</span><span class="s">" is unknown.'</span> <span class="o">%</span> <span class="p">(</span><span class="n">value</span><span class="p">,))</span>
|
|
|
|
</div></div>
|
|
<div class="viewcode-block" id="VdtParamError"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtParamError">[docs]</a><span class="k">class</span> <span class="nc">VdtParamError</span><span class="p">(</span><span class="ne">SyntaxError</span><span class="p">):</span>
|
|
<span class="sd">"""An incorrect parameter was passed"""</span>
|
|
|
|
<div class="viewcode-block" id="VdtParamError.__init__"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtParamError.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__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">value</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> >>> raise VdtParamError('yoda', 'jedi')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtParamError: passed an incorrect value "jedi" for parameter "yoda".</span>
|
|
<span class="sd"> """</span>
|
|
<span class="ne">SyntaxError</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">'passed an incorrect value "</span><span class="si">%s</span><span class="s">" for parameter "</span><span class="si">%s</span><span class="s">".'</span> <span class="o">%</span> <span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
|
|
|
|
</div></div>
|
|
<div class="viewcode-block" id="VdtTypeError"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtTypeError">[docs]</a><span class="k">class</span> <span class="nc">VdtTypeError</span><span class="p">(</span><span class="n">ValidateError</span><span class="p">):</span>
|
|
<span class="sd">"""The value supplied was of the wrong type"""</span>
|
|
|
|
<div class="viewcode-block" id="VdtTypeError.__init__"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtTypeError.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> >>> raise VdtTypeError('jedi')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "jedi" is of the wrong type.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">ValidateError</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">'the value "</span><span class="si">%s</span><span class="s">" is of the wrong type.'</span> <span class="o">%</span> <span class="p">(</span><span class="n">value</span><span class="p">,))</span>
|
|
|
|
</div></div>
|
|
<div class="viewcode-block" id="VdtValueError"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtValueError">[docs]</a><span class="k">class</span> <span class="nc">VdtValueError</span><span class="p">(</span><span class="n">ValidateError</span><span class="p">):</span>
|
|
<span class="sd">"""The value supplied was of the correct type, but was not an allowed value."""</span>
|
|
|
|
<div class="viewcode-block" id="VdtValueError.__init__"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtValueError.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> >>> raise VdtValueError('jedi')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueError: the value "jedi" is unacceptable.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">ValidateError</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">'the value "</span><span class="si">%s</span><span class="s">" is unacceptable.'</span> <span class="o">%</span> <span class="p">(</span><span class="n">value</span><span class="p">,))</span>
|
|
|
|
</div></div>
|
|
<div class="viewcode-block" id="VdtValueTooSmallError"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtValueTooSmallError">[docs]</a><span class="k">class</span> <span class="nc">VdtValueTooSmallError</span><span class="p">(</span><span class="n">VdtValueError</span><span class="p">):</span>
|
|
<span class="sd">"""The value supplied was of the correct type, but was too small."""</span>
|
|
|
|
<div class="viewcode-block" id="VdtValueTooSmallError.__init__"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtValueTooSmallError.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> >>> raise VdtValueTooSmallError('0')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooSmallError: the value "0" is too small.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">ValidateError</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">'the value "</span><span class="si">%s</span><span class="s">" is too small.'</span> <span class="o">%</span> <span class="p">(</span><span class="n">value</span><span class="p">,))</span>
|
|
|
|
</div></div>
|
|
<div class="viewcode-block" id="VdtValueTooBigError"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtValueTooBigError">[docs]</a><span class="k">class</span> <span class="nc">VdtValueTooBigError</span><span class="p">(</span><span class="n">VdtValueError</span><span class="p">):</span>
|
|
<span class="sd">"""The value supplied was of the correct type, but was too big."""</span>
|
|
|
|
<div class="viewcode-block" id="VdtValueTooBigError.__init__"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtValueTooBigError.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> >>> raise VdtValueTooBigError('1')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooBigError: the value "1" is too big.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">ValidateError</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">'the value "</span><span class="si">%s</span><span class="s">" is too big.'</span> <span class="o">%</span> <span class="p">(</span><span class="n">value</span><span class="p">,))</span>
|
|
|
|
</div></div>
|
|
<div class="viewcode-block" id="VdtValueTooShortError"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtValueTooShortError">[docs]</a><span class="k">class</span> <span class="nc">VdtValueTooShortError</span><span class="p">(</span><span class="n">VdtValueError</span><span class="p">):</span>
|
|
<span class="sd">"""The value supplied was of the correct type, but was too short."""</span>
|
|
|
|
<div class="viewcode-block" id="VdtValueTooShortError.__init__"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtValueTooShortError.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> >>> raise VdtValueTooShortError('jed')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooShortError: the value "jed" is too short.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">ValidateError</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="p">,</span>
|
|
<span class="s">'the value "</span><span class="si">%s</span><span class="s">" is too short.'</span> <span class="o">%</span> <span class="p">(</span><span class="n">value</span><span class="p">,))</span>
|
|
|
|
</div></div>
|
|
<div class="viewcode-block" id="VdtValueTooLongError"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtValueTooLongError">[docs]</a><span class="k">class</span> <span class="nc">VdtValueTooLongError</span><span class="p">(</span><span class="n">VdtValueError</span><span class="p">):</span>
|
|
<span class="sd">"""The value supplied was of the correct type, but was too long."""</span>
|
|
|
|
<div class="viewcode-block" id="VdtValueTooLongError.__init__"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.VdtValueTooLongError.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> >>> raise VdtValueTooLongError('jedie')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooLongError: the value "jedie" is too long.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">ValidateError</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">'the value "</span><span class="si">%s</span><span class="s">" is too long.'</span> <span class="o">%</span> <span class="p">(</span><span class="n">value</span><span class="p">,))</span>
|
|
|
|
</div></div>
|
|
<div class="viewcode-block" id="Validator"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.Validator">[docs]</a><span class="k">class</span> <span class="nc">Validator</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Validator is an object that allows you to register a set of 'checks'.</span>
|
|
<span class="sd"> These checks take input and test that it conforms to the check.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> This can also involve converting the value from a string into</span>
|
|
<span class="sd"> the correct datatype.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> The ``check`` method takes an input string which configures which</span>
|
|
<span class="sd"> check is to be used and applies that check to a supplied value.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> An example input string would be:</span>
|
|
<span class="sd"> 'int_range(param1, param2)'</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> You would then provide something like:</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> def int_range_check(value, min, max):</span>
|
|
<span class="sd"> ... # turn min and max from strings to integers</span>
|
|
<span class="sd"> ... min = int(min)</span>
|
|
<span class="sd"> ... max = int(max)</span>
|
|
<span class="sd"> ... # check that value is of the correct type.</span>
|
|
<span class="sd"> ... # possible valid inputs are integers or strings</span>
|
|
<span class="sd"> ... # that represent integers</span>
|
|
<span class="sd"> ... if not isinstance(value, (int, long, basestring)):</span>
|
|
<span class="sd"> ... raise VdtTypeError(value)</span>
|
|
<span class="sd"> ... elif isinstance(value, basestring):</span>
|
|
<span class="sd"> ... # if we are given a string</span>
|
|
<span class="sd"> ... # attempt to convert to an integer</span>
|
|
<span class="sd"> ... try:</span>
|
|
<span class="sd"> ... value = int(value)</span>
|
|
<span class="sd"> ... except ValueError:</span>
|
|
<span class="sd"> ... raise VdtValueError(value)</span>
|
|
<span class="sd"> ... # check the value is between our constraints</span>
|
|
<span class="sd"> ... if not min <= value:</span>
|
|
<span class="sd"> ... raise VdtValueTooSmallError(value)</span>
|
|
<span class="sd"> ... if not value <= max:</span>
|
|
<span class="sd"> ... raise VdtValueTooBigError(value)</span>
|
|
<span class="sd"> ... return value</span>
|
|
<span class="sd"> ...</span>
|
|
<span class="sd"> >>> fdict = {'int_range': int_range_check}</span>
|
|
<span class="sd"> >>> vtr1 = Validator(fdict)</span>
|
|
<span class="sd"> >>> vtr1.check('int_range(20, 40)', '30')</span>
|
|
<span class="sd"> 30</span>
|
|
<span class="sd"> >>> vtr1.check('int_range(20, 40)', '60')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooBigError: the value "60" is too big.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> New functions can be added with : ::</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtr2 = Validator() </span>
|
|
<span class="sd"> >>> vtr2.functions['int_range'] = int_range_check</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Or by passing in a dictionary of functions when Validator </span>
|
|
<span class="sd"> is instantiated.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Your functions *can* use keyword arguments,</span>
|
|
<span class="sd"> but the first argument should always be 'value'.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> If the function doesn't take additional arguments,</span>
|
|
<span class="sd"> the parentheses are optional in the check.</span>
|
|
<span class="sd"> It can be written with either of : ::</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> keyword = function_name</span>
|
|
<span class="sd"> keyword = function_name()</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> The first program to utilise Validator() was Michael Foord's</span>
|
|
<span class="sd"> ConfigObj, an alternative to ConfigParser which supports lists and</span>
|
|
<span class="sd"> can validate a config file using a config schema.</span>
|
|
<span class="sd"> For more details on using Validator with ConfigObj see:</span>
|
|
<span class="sd"> http://www.voidspace.org.uk/python/configobj.html</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="c"># this regex does the initial parsing of the checks</span>
|
|
<span class="n">_func_re</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="s">r'(.+?)\((.*)\)'</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span><span class="p">)</span>
|
|
|
|
<span class="c"># this regex takes apart keyword arguments</span>
|
|
<span class="n">_key_arg</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="s">r'^([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.*)$'</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span><span class="p">)</span>
|
|
|
|
|
|
<span class="c"># this regex finds keyword=list(....) type values</span>
|
|
<span class="n">_list_arg</span> <span class="o">=</span> <span class="n">_list_arg</span>
|
|
|
|
<span class="c"># this regex takes individual values out of lists - in one pass</span>
|
|
<span class="n">_list_members</span> <span class="o">=</span> <span class="n">_list_members</span>
|
|
|
|
<span class="c"># These regexes check a set of arguments for validity</span>
|
|
<span class="c"># and then pull the members out</span>
|
|
<span class="n">_paramfinder</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="n">_paramstring</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">VERBOSE</span> <span class="o">|</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span><span class="p">)</span>
|
|
<span class="n">_matchfinder</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="n">_matchstring</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">VERBOSE</span> <span class="o">|</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span><span class="p">)</span>
|
|
|
|
|
|
<div class="viewcode-block" id="Validator.__init__"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.Validator.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">functions</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> >>> vtri = Validator()</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">functions</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s">''</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pass</span><span class="p">,</span>
|
|
<span class="s">'integer'</span><span class="p">:</span> <span class="n">is_integer</span><span class="p">,</span>
|
|
<span class="s">'float'</span><span class="p">:</span> <span class="n">is_float</span><span class="p">,</span>
|
|
<span class="s">'boolean'</span><span class="p">:</span> <span class="n">is_boolean</span><span class="p">,</span>
|
|
<span class="s">'ip_addr'</span><span class="p">:</span> <span class="n">is_ip_addr</span><span class="p">,</span>
|
|
<span class="s">'string'</span><span class="p">:</span> <span class="n">is_string</span><span class="p">,</span>
|
|
<span class="s">'list'</span><span class="p">:</span> <span class="n">is_list</span><span class="p">,</span>
|
|
<span class="s">'tuple'</span><span class="p">:</span> <span class="n">is_tuple</span><span class="p">,</span>
|
|
<span class="s">'int_list'</span><span class="p">:</span> <span class="n">is_int_list</span><span class="p">,</span>
|
|
<span class="s">'float_list'</span><span class="p">:</span> <span class="n">is_float_list</span><span class="p">,</span>
|
|
<span class="s">'bool_list'</span><span class="p">:</span> <span class="n">is_bool_list</span><span class="p">,</span>
|
|
<span class="s">'ip_addr_list'</span><span class="p">:</span> <span class="n">is_ip_addr_list</span><span class="p">,</span>
|
|
<span class="s">'string_list'</span><span class="p">:</span> <span class="n">is_string_list</span><span class="p">,</span>
|
|
<span class="s">'mixed_list'</span><span class="p">:</span> <span class="n">is_mixed_list</span><span class="p">,</span>
|
|
<span class="s">'pass'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pass</span><span class="p">,</span>
|
|
<span class="s">'option'</span><span class="p">:</span> <span class="n">is_option</span><span class="p">,</span>
|
|
<span class="s">'force_list'</span><span class="p">:</span> <span class="n">force_list</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
<span class="k">if</span> <span class="n">functions</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">functions</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">functions</span><span class="p">)</span>
|
|
<span class="c"># tekNico: for use by ConfigObj</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">baseErrorClass</span> <span class="o">=</span> <span class="n">ValidateError</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="p">{}</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="Validator.check"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.Validator.check">[docs]</a> <span class="k">def</span> <span class="nf">check</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">check</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">missing</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Usage: check(check, value)</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Arguments:</span>
|
|
<span class="sd"> check: string representing check to apply (including arguments)</span>
|
|
<span class="sd"> value: object to be checked</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Returns value, converted to correct type if necessary</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> If the check fails, raises a ``ValidateError`` subclass.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('yoda', '')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtUnknownCheckError: the check "yoda" is unknown.</span>
|
|
<span class="sd"> >>> vtor.check('yoda()', '')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtUnknownCheckError: the check "yoda" is unknown.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('string(default="")', '', missing=True)</span>
|
|
<span class="sd"> ''</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fun_name</span><span class="p">,</span> <span class="n">fun_args</span><span class="p">,</span> <span class="n">fun_kwargs</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">_parse_with_caching</span><span class="p">(</span><span class="n">check</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">missing</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
|
|
<span class="c"># no information needed here - to be handled by caller</span>
|
|
<span class="k">raise</span> <span class="n">VdtMissingValue</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">_handle_none</span><span class="p">(</span><span class="n">default</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">None</span>
|
|
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_value</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">fun_name</span><span class="p">,</span> <span class="n">fun_args</span><span class="p">,</span> <span class="n">fun_kwargs</span><span class="p">)</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="Validator._handle_none"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.Validator._handle_none">[docs]</a> <span class="k">def</span> <span class="nf">_handle_none</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="s">'None'</span><span class="p">:</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="bp">None</span>
|
|
<span class="k">elif</span> <span class="n">value</span> <span class="ow">in</span> <span class="p">(</span><span class="s">"'None'"</span><span class="p">,</span> <span class="s">'"None"'</span><span class="p">):</span>
|
|
<span class="c"># Special case a quoted None</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unquote</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">value</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="Validator._parse_with_caching"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.Validator._parse_with_caching">[docs]</a> <span class="k">def</span> <span class="nf">_parse_with_caching</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">check</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">check</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">:</span>
|
|
<span class="n">fun_name</span><span class="p">,</span> <span class="n">fun_args</span><span class="p">,</span> <span class="n">fun_kwargs</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">_cache</span><span class="p">[</span><span class="n">check</span><span class="p">]</span>
|
|
<span class="c"># We call list and dict below to work with *copies* of the data</span>
|
|
<span class="c"># rather than the original (which are mutable of course)</span>
|
|
<span class="n">fun_args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">fun_args</span><span class="p">)</span>
|
|
<span class="n">fun_kwargs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">fun_kwargs</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">fun_name</span><span class="p">,</span> <span class="n">fun_args</span><span class="p">,</span> <span class="n">fun_kwargs</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">_parse_check</span><span class="p">(</span><span class="n">check</span><span class="p">)</span>
|
|
<span class="n">fun_kwargs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">([(</span><span class="nb">str</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">for</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="ow">in</span> <span class="n">fun_kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">[</span><span class="n">check</span><span class="p">]</span> <span class="o">=</span> <span class="n">fun_name</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">fun_args</span><span class="p">),</span> <span class="nb">dict</span><span class="p">(</span><span class="n">fun_kwargs</span><span class="p">),</span> <span class="n">default</span>
|
|
<span class="k">return</span> <span class="n">fun_name</span><span class="p">,</span> <span class="n">fun_args</span><span class="p">,</span> <span class="n">fun_kwargs</span><span class="p">,</span> <span class="n">default</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="Validator._check_value"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.Validator._check_value">[docs]</a> <span class="k">def</span> <span class="nf">_check_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">fun_name</span><span class="p">,</span> <span class="n">fun_args</span><span class="p">,</span> <span class="n">fun_kwargs</span><span class="p">):</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">fun</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">functions</span><span class="p">[</span><span class="n">fun_name</span><span class="p">]</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">VdtUnknownCheckError</span><span class="p">(</span><span class="n">fun_name</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">fun</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="o">*</span><span class="n">fun_args</span><span class="p">,</span> <span class="o">**</span><span class="n">fun_kwargs</span><span class="p">)</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="Validator._parse_check"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.Validator._parse_check">[docs]</a> <span class="k">def</span> <span class="nf">_parse_check</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">check</span><span class="p">):</span>
|
|
<span class="n">fun_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_func_re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">check</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">fun_match</span><span class="p">:</span>
|
|
<span class="n">fun_name</span> <span class="o">=</span> <span class="n">fun_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="n">arg_string</span> <span class="o">=</span> <span class="n">fun_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">arg_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_matchfinder</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="n">arg_match</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
|
|
<span class="c"># Bad syntax</span>
|
|
<span class="k">raise</span> <span class="n">VdtParamError</span><span class="p">(</span><span class="s">'Bad syntax in check "</span><span class="si">%s</span><span class="s">".'</span> <span class="o">%</span> <span class="n">check</span><span class="p">)</span>
|
|
<span class="n">fun_args</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">fun_kwargs</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="c"># pull out args of group 2</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">_paramfinder</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">arg_string</span><span class="p">):</span>
|
|
<span class="c"># args may need whitespace removing (before removing quotes)</span>
|
|
<span class="n">arg</span> <span class="o">=</span> <span class="n">arg</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">listmatch</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_list_arg</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">listmatch</span><span class="p">:</span>
|
|
<span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_list_handle</span><span class="p">(</span><span class="n">listmatch</span><span class="p">)</span>
|
|
<span class="n">fun_kwargs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span>
|
|
<span class="k">continue</span>
|
|
<span class="n">keymatch</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_key_arg</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">keymatch</span><span class="p">:</span>
|
|
<span class="n">val</span> <span class="o">=</span> <span class="n">keymatch</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">val</span> <span class="ow">in</span> <span class="p">(</span><span class="s">"'None'"</span><span class="p">,</span> <span class="s">'"None"'</span><span class="p">):</span>
|
|
<span class="c"># Special case a quoted None</span>
|
|
<span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unquote</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
|
|
<span class="n">fun_kwargs</span><span class="p">[</span><span class="n">keymatch</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="o">=</span> <span class="n">val</span>
|
|
<span class="k">continue</span>
|
|
|
|
<span class="n">fun_args</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">_unquote</span><span class="p">(</span><span class="n">arg</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c"># allows for function names without (args)</span>
|
|
<span class="k">return</span> <span class="n">check</span><span class="p">,</span> <span class="p">(),</span> <span class="p">{},</span> <span class="bp">None</span>
|
|
|
|
<span class="c"># Default must be deleted if the value is specified too,</span>
|
|
<span class="c"># otherwise the check function will get a spurious "default" keyword arg</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">default</span> <span class="o">=</span> <span class="n">fun_kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">'default'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
|
<span class="c"># Python 2.2 compatibility</span>
|
|
<span class="n">default</span> <span class="o">=</span> <span class="bp">None</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">default</span> <span class="o">=</span> <span class="n">fun_kwargs</span><span class="p">[</span><span class="s">'default'</span><span class="p">]</span>
|
|
<span class="k">del</span> <span class="n">fun_kwargs</span><span class="p">[</span><span class="s">'default'</span><span class="p">]</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="k">return</span> <span class="n">fun_name</span><span class="p">,</span> <span class="n">fun_args</span><span class="p">,</span> <span class="n">fun_kwargs</span><span class="p">,</span> <span class="n">default</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="Validator._unquote"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.Validator._unquote">[docs]</a> <span class="k">def</span> <span class="nf">_unquote</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
|
|
<span class="sd">"""Unquote a value if necessary."""</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">2</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">(</span><span class="s">"'"</span><span class="p">,</span> <span class="s">'"'</span><span class="p">))</span> <span class="ow">and</span> <span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="n">val</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]):</span>
|
|
<span class="n">val</span> <span class="o">=</span> <span class="n">val</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="k">return</span> <span class="n">val</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="Validator._list_handle"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.Validator._list_handle">[docs]</a> <span class="k">def</span> <span class="nf">_list_handle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">listmatch</span><span class="p">):</span>
|
|
<span class="sd">"""Take apart a ``keyword=list('val, 'val')`` type string."""</span>
|
|
<span class="n">out</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="n">listmatch</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="n">args</span> <span class="o">=</span> <span class="n">listmatch</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">2</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">_list_members</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="n">out</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">_unquote</span><span class="p">(</span><span class="n">arg</span><span class="p">))</span>
|
|
<span class="k">return</span> <span class="n">name</span><span class="p">,</span> <span class="n">out</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="Validator._pass"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.Validator._pass">[docs]</a> <span class="k">def</span> <span class="nf">_pass</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Dummy check that always passes</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('', 0)</span>
|
|
<span class="sd"> 0</span>
|
|
<span class="sd"> >>> vtor.check('', '0')</span>
|
|
<span class="sd"> '0'</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">value</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="Validator.get_default_value"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.Validator.get_default_value">[docs]</a> <span class="k">def</span> <span class="nf">get_default_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">check</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Given a check, return the default value for the check</span>
|
|
<span class="sd"> (converted to the right type).</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> If the check doesn't specify a default value then a</span>
|
|
<span class="sd"> ``KeyError`` will be raised.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fun_name</span><span class="p">,</span> <span class="n">fun_args</span><span class="p">,</span> <span class="n">fun_kwargs</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">_parse_with_caching</span><span class="p">(</span><span class="n">check</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s">'Check "</span><span class="si">%s</span><span class="s">" has no default value.'</span> <span class="o">%</span> <span class="n">check</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">_handle_none</span><span class="p">(</span><span class="n">default</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">value</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_value</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">fun_name</span><span class="p">,</span> <span class="n">fun_args</span><span class="p">,</span> <span class="n">fun_kwargs</span><span class="p">)</span>
|
|
|
|
</div></div>
|
|
<span class="k">def</span> <span class="nf">_is_num_param</span><span class="p">(</span><span class="n">names</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">to_float</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Return numbers from inputs or raise VdtParamError.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Lets ``None`` pass through.</span>
|
|
<span class="sd"> Pass in keyword argument ``to_float=True`` to</span>
|
|
<span class="sd"> use float for the conversion rather than int.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> _is_num_param(('', ''), (0, 1.0))</span>
|
|
<span class="sd"> [0, 1]</span>
|
|
<span class="sd"> >>> _is_num_param(('', ''), (0, 1.0), to_float=True)</span>
|
|
<span class="sd"> [0.0, 1.0]</span>
|
|
<span class="sd"> >>> _is_num_param(('a'), ('a'))</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtParamError: passed an incorrect value "a" for parameter "a".</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">fun</span> <span class="o">=</span> <span class="n">to_float</span> <span class="ow">and</span> <span class="nb">float</span> <span class="ow">or</span> <span class="nb">int</span>
|
|
<span class="n">out_params</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">names</span><span class="p">,</span> <span class="n">values</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">val</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
|
|
<span class="n">out_params</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="nb">long</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">basestring</span><span class="p">)):</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">out_params</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fun</span><span class="p">(</span><span class="n">val</span><span class="p">))</span>
|
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">VdtParamError</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">VdtParamError</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">out_params</span>
|
|
|
|
|
|
<span class="c"># built in checks</span>
|
|
<span class="c"># you can override these by setting the appropriate name</span>
|
|
<span class="c"># in Validator.functions</span>
|
|
<span class="c"># note: if the params are specified wrongly in your input string,</span>
|
|
<span class="c"># you will also raise errors.</span>
|
|
|
|
<div class="viewcode-block" id="is_integer"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.is_integer">[docs]</a><span class="k">def</span> <span class="nf">is_integer</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> A check that tests that a given value is an integer (int, or long)</span>
|
|
<span class="sd"> and optionally, between bounds. A negative value is accepted, while</span>
|
|
<span class="sd"> a float will fail.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> If the value is a string, then the conversion is done - if possible.</span>
|
|
<span class="sd"> Otherwise a VdtError is raised.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('integer', '-1')</span>
|
|
<span class="sd"> -1</span>
|
|
<span class="sd"> >>> vtor.check('integer', '0')</span>
|
|
<span class="sd"> 0</span>
|
|
<span class="sd"> >>> vtor.check('integer', 9)</span>
|
|
<span class="sd"> 9</span>
|
|
<span class="sd"> >>> vtor.check('integer', 'a')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "a" is of the wrong type.</span>
|
|
<span class="sd"> >>> vtor.check('integer', '2.2')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "2.2" is of the wrong type.</span>
|
|
<span class="sd"> >>> vtor.check('integer(10)', '20')</span>
|
|
<span class="sd"> 20</span>
|
|
<span class="sd"> >>> vtor.check('integer(max=20)', '15')</span>
|
|
<span class="sd"> 15</span>
|
|
<span class="sd"> >>> vtor.check('integer(10)', '9')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooSmallError: the value "9" is too small.</span>
|
|
<span class="sd"> >>> vtor.check('integer(10)', 9)</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooSmallError: the value "9" is too small.</span>
|
|
<span class="sd"> >>> vtor.check('integer(max=20)', '35')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooBigError: the value "35" is too big.</span>
|
|
<span class="sd"> >>> vtor.check('integer(max=20)', 35)</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooBigError: the value "35" is too big.</span>
|
|
<span class="sd"> >>> vtor.check('integer(0, 9)', False)</span>
|
|
<span class="sd"> 0</span>
|
|
<span class="sd"> """</span>
|
|
<span class="p">(</span><span class="n">min_val</span><span class="p">,</span> <span class="n">max_val</span><span class="p">)</span> <span class="o">=</span> <span class="n">_is_num_param</span><span class="p">((</span><span class="s">'min'</span><span class="p">,</span> <span class="s">'max'</span><span class="p">),</span> <span class="p">(</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</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">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="nb">long</span><span class="p">,</span> <span class="nb">basestring</span><span class="p">)):</span>
|
|
<span class="k">raise</span> <span class="n">VdtTypeError</span><span class="p">(</span><span class="n">value</span><span class="p">)</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">basestring</span><span class="p">):</span>
|
|
<span class="c"># if it's a string - does it represent an integer ?</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">VdtTypeError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="n">min_val</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">value</span> <span class="o"><</span> <span class="n">min_val</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="n">VdtValueTooSmallError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="n">max_val</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">value</span> <span class="o">></span> <span class="n">max_val</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="n">VdtValueTooBigError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">value</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="is_float"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.is_float">[docs]</a><span class="k">def</span> <span class="nf">is_float</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> A check that tests that a given value is a float</span>
|
|
<span class="sd"> (an integer will be accepted), and optionally - that it is between bounds.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> If the value is a string, then the conversion is done - if possible.</span>
|
|
<span class="sd"> Otherwise a VdtError is raised.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> This can accept negative values.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('float', '2')</span>
|
|
<span class="sd"> 2.0</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> From now on we multiply the value to avoid comparing decimals</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('float', '-6.8') * 10</span>
|
|
<span class="sd"> -68.0</span>
|
|
<span class="sd"> >>> vtor.check('float', '12.2') * 10</span>
|
|
<span class="sd"> 122.0</span>
|
|
<span class="sd"> >>> vtor.check('float', 8.4) * 10</span>
|
|
<span class="sd"> 84.0</span>
|
|
<span class="sd"> >>> vtor.check('float', 'a')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "a" is of the wrong type.</span>
|
|
<span class="sd"> >>> vtor.check('float(10.1)', '10.2') * 10</span>
|
|
<span class="sd"> 102.0</span>
|
|
<span class="sd"> >>> vtor.check('float(max=20.2)', '15.1') * 10</span>
|
|
<span class="sd"> 151.0</span>
|
|
<span class="sd"> >>> vtor.check('float(10.0)', '9.0')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooSmallError: the value "9.0" is too small.</span>
|
|
<span class="sd"> >>> vtor.check('float(max=20.0)', '35.0')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooBigError: the value "35.0" is too big.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="p">(</span><span class="n">min_val</span><span class="p">,</span> <span class="n">max_val</span><span class="p">)</span> <span class="o">=</span> <span class="n">_is_num_param</span><span class="p">(</span>
|
|
<span class="p">(</span><span class="s">'min'</span><span class="p">,</span> <span class="s">'max'</span><span class="p">),</span> <span class="p">(</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="p">),</span> <span class="n">to_float</span><span class="o">=</span><span class="bp">True</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">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="nb">long</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">basestring</span><span class="p">)):</span>
|
|
<span class="k">raise</span> <span class="n">VdtTypeError</span><span class="p">(</span><span class="n">value</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">value</span><span class="p">,</span> <span class="nb">float</span><span class="p">):</span>
|
|
<span class="c"># if it's a string - does it represent a float ?</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">VdtTypeError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="n">min_val</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">value</span> <span class="o"><</span> <span class="n">min_val</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="n">VdtValueTooSmallError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="n">max_val</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">value</span> <span class="o">></span> <span class="n">max_val</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="n">VdtValueTooBigError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">value</span>
|
|
|
|
</div>
|
|
<span class="n">bool_dict</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="bp">True</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> <span class="s">'on'</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> <span class="s">'1'</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> <span class="s">'true'</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> <span class="s">'yes'</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span>
|
|
<span class="bp">False</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span> <span class="s">'off'</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span> <span class="s">'0'</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span> <span class="s">'false'</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span> <span class="s">'no'</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
|
|
|
|
<div class="viewcode-block" id="is_boolean"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.is_boolean">[docs]</a><span class="k">def</span> <span class="nf">is_boolean</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Check if the value represents a boolean.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('boolean', 0)</span>
|
|
<span class="sd"> 0</span>
|
|
<span class="sd"> >>> vtor.check('boolean', False)</span>
|
|
<span class="sd"> 0</span>
|
|
<span class="sd"> >>> vtor.check('boolean', '0')</span>
|
|
<span class="sd"> 0</span>
|
|
<span class="sd"> >>> vtor.check('boolean', 'off')</span>
|
|
<span class="sd"> 0</span>
|
|
<span class="sd"> >>> vtor.check('boolean', 'false')</span>
|
|
<span class="sd"> 0</span>
|
|
<span class="sd"> >>> vtor.check('boolean', 'no')</span>
|
|
<span class="sd"> 0</span>
|
|
<span class="sd"> >>> vtor.check('boolean', 'nO')</span>
|
|
<span class="sd"> 0</span>
|
|
<span class="sd"> >>> vtor.check('boolean', 'NO')</span>
|
|
<span class="sd"> 0</span>
|
|
<span class="sd"> >>> vtor.check('boolean', 1)</span>
|
|
<span class="sd"> 1</span>
|
|
<span class="sd"> >>> vtor.check('boolean', True)</span>
|
|
<span class="sd"> 1</span>
|
|
<span class="sd"> >>> vtor.check('boolean', '1')</span>
|
|
<span class="sd"> 1</span>
|
|
<span class="sd"> >>> vtor.check('boolean', 'on')</span>
|
|
<span class="sd"> 1</span>
|
|
<span class="sd"> >>> vtor.check('boolean', 'true')</span>
|
|
<span class="sd"> 1</span>
|
|
<span class="sd"> >>> vtor.check('boolean', 'yes')</span>
|
|
<span class="sd"> 1</span>
|
|
<span class="sd"> >>> vtor.check('boolean', 'Yes')</span>
|
|
<span class="sd"> 1</span>
|
|
<span class="sd"> >>> vtor.check('boolean', 'YES')</span>
|
|
<span class="sd"> 1</span>
|
|
<span class="sd"> >>> vtor.check('boolean', '')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "" is of the wrong type.</span>
|
|
<span class="sd"> >>> vtor.check('boolean', 'up')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "up" is of the wrong type.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> """</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">basestring</span><span class="p">):</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">bool_dict</span><span class="p">[</span><span class="n">value</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">VdtTypeError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="c"># we do an equality test rather than an identity test</span>
|
|
<span class="c"># this ensures Python 2.2 compatibilty</span>
|
|
<span class="c"># and allows 0 and 1 to represent True and False</span>
|
|
<span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="bp">False</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">False</span>
|
|
<span class="k">elif</span> <span class="n">value</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">True</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">VdtTypeError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="is_ip_addr"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.is_ip_addr">[docs]</a><span class="k">def</span> <span class="nf">is_ip_addr</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Check that the supplied value is an Internet Protocol address, v.4,</span>
|
|
<span class="sd"> represented by a dotted-quad string, i.e. '1.2.3.4'.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('ip_addr', '1 ')</span>
|
|
<span class="sd"> '1'</span>
|
|
<span class="sd"> >>> vtor.check('ip_addr', ' 1.2')</span>
|
|
<span class="sd"> '1.2'</span>
|
|
<span class="sd"> >>> vtor.check('ip_addr', ' 1.2.3 ')</span>
|
|
<span class="sd"> '1.2.3'</span>
|
|
<span class="sd"> >>> vtor.check('ip_addr', '1.2.3.4')</span>
|
|
<span class="sd"> '1.2.3.4'</span>
|
|
<span class="sd"> >>> vtor.check('ip_addr', '0.0.0.0')</span>
|
|
<span class="sd"> '0.0.0.0'</span>
|
|
<span class="sd"> >>> vtor.check('ip_addr', '255.255.255.255')</span>
|
|
<span class="sd"> '255.255.255.255'</span>
|
|
<span class="sd"> >>> vtor.check('ip_addr', '255.255.255.256')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueError: the value "255.255.255.256" is unacceptable.</span>
|
|
<span class="sd"> >>> vtor.check('ip_addr', '1.2.3.4.5')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueError: the value "1.2.3.4.5" is unacceptable.</span>
|
|
<span class="sd"> >>> vtor.check('ip_addr', 0)</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "0" is of the wrong type.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">basestring</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="n">VdtTypeError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">dottedQuadToNum</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">VdtValueError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">value</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="is_list"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.is_list">[docs]</a><span class="k">def</span> <span class="nf">is_list</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Check that the value is a list of values.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> You can optionally specify the minimum and maximum number of members.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> It does no check on list members.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('list', ())</span>
|
|
<span class="sd"> []</span>
|
|
<span class="sd"> >>> vtor.check('list', [])</span>
|
|
<span class="sd"> []</span>
|
|
<span class="sd"> >>> vtor.check('list', (1, 2))</span>
|
|
<span class="sd"> [1, 2]</span>
|
|
<span class="sd"> >>> vtor.check('list', [1, 2])</span>
|
|
<span class="sd"> [1, 2]</span>
|
|
<span class="sd"> >>> vtor.check('list(3)', (1, 2))</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooShortError: the value "(1, 2)" is too short.</span>
|
|
<span class="sd"> >>> vtor.check('list(max=5)', (1, 2, 3, 4, 5, 6))</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooLongError: the value "(1, 2, 3, 4, 5, 6)" is too long.</span>
|
|
<span class="sd"> >>> vtor.check('list(min=3, max=5)', (1, 2, 3, 4))</span>
|
|
<span class="sd"> [1, 2, 3, 4]</span>
|
|
<span class="sd"> >>> vtor.check('list', 0)</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "0" is of the wrong type.</span>
|
|
<span class="sd"> >>> vtor.check('list', '12')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "12" is of the wrong type.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="p">(</span><span class="n">min_len</span><span class="p">,</span> <span class="n">max_len</span><span class="p">)</span> <span class="o">=</span> <span class="n">_is_num_param</span><span class="p">((</span><span class="s">'min'</span><span class="p">,</span> <span class="s">'max'</span><span class="p">),</span> <span class="p">(</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="p">))</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">basestring</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="n">VdtTypeError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">num_members</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</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="n">VdtTypeError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">min_len</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">num_members</span> <span class="o"><</span> <span class="n">min_len</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">VdtValueTooShortError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">max_len</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">num_members</span> <span class="o">></span> <span class="n">max_len</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">VdtValueTooLongError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="is_tuple"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.is_tuple">[docs]</a><span class="k">def</span> <span class="nf">is_tuple</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Check that the value is a tuple of values.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> You can optionally specify the minimum and maximum number of members.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> It does no check on members.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('tuple', ())</span>
|
|
<span class="sd"> ()</span>
|
|
<span class="sd"> >>> vtor.check('tuple', [])</span>
|
|
<span class="sd"> ()</span>
|
|
<span class="sd"> >>> vtor.check('tuple', (1, 2))</span>
|
|
<span class="sd"> (1, 2)</span>
|
|
<span class="sd"> >>> vtor.check('tuple', [1, 2])</span>
|
|
<span class="sd"> (1, 2)</span>
|
|
<span class="sd"> >>> vtor.check('tuple(3)', (1, 2))</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooShortError: the value "(1, 2)" is too short.</span>
|
|
<span class="sd"> >>> vtor.check('tuple(max=5)', (1, 2, 3, 4, 5, 6))</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooLongError: the value "(1, 2, 3, 4, 5, 6)" is too long.</span>
|
|
<span class="sd"> >>> vtor.check('tuple(min=3, max=5)', (1, 2, 3, 4))</span>
|
|
<span class="sd"> (1, 2, 3, 4)</span>
|
|
<span class="sd"> >>> vtor.check('tuple', 0)</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "0" is of the wrong type.</span>
|
|
<span class="sd"> >>> vtor.check('tuple', '12')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "12" is of the wrong type.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">is_list</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="p">))</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="is_string"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.is_string">[docs]</a><span class="k">def</span> <span class="nf">is_string</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Check that the supplied value is a string.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> You can optionally specify the minimum and maximum number of members.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('string', '0')</span>
|
|
<span class="sd"> '0'</span>
|
|
<span class="sd"> >>> vtor.check('string', 0)</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "0" is of the wrong type.</span>
|
|
<span class="sd"> >>> vtor.check('string(2)', '12')</span>
|
|
<span class="sd"> '12'</span>
|
|
<span class="sd"> >>> vtor.check('string(2)', '1')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooShortError: the value "1" is too short.</span>
|
|
<span class="sd"> >>> vtor.check('string(min=2, max=3)', '123')</span>
|
|
<span class="sd"> '123'</span>
|
|
<span class="sd"> >>> vtor.check('string(min=2, max=3)', '1234')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooLongError: the value "1234" is too long.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">basestring</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="n">VdtTypeError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="p">(</span><span class="n">min_len</span><span class="p">,</span> <span class="n">max_len</span><span class="p">)</span> <span class="o">=</span> <span class="n">_is_num_param</span><span class="p">((</span><span class="s">'min'</span><span class="p">,</span> <span class="s">'max'</span><span class="p">),</span> <span class="p">(</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="p">))</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">num_members</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</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="n">VdtTypeError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">min_len</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">num_members</span> <span class="o"><</span> <span class="n">min_len</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">VdtValueTooShortError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">max_len</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">num_members</span> <span class="o">></span> <span class="n">max_len</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">VdtValueTooLongError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">value</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="is_int_list"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.is_int_list">[docs]</a><span class="k">def</span> <span class="nf">is_int_list</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Check that the value is a list of integers.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> You can optionally specify the minimum and maximum number of members.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Each list member is checked that it is an integer.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('int_list', ())</span>
|
|
<span class="sd"> []</span>
|
|
<span class="sd"> >>> vtor.check('int_list', [])</span>
|
|
<span class="sd"> []</span>
|
|
<span class="sd"> >>> vtor.check('int_list', (1, 2))</span>
|
|
<span class="sd"> [1, 2]</span>
|
|
<span class="sd"> >>> vtor.check('int_list', [1, 2])</span>
|
|
<span class="sd"> [1, 2]</span>
|
|
<span class="sd"> >>> vtor.check('int_list', [1, 'a'])</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "a" is of the wrong type.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">is_integer</span><span class="p">(</span><span class="n">mem</span><span class="p">)</span> <span class="k">for</span> <span class="n">mem</span> <span class="ow">in</span> <span class="n">is_list</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="p">)]</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="is_bool_list"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.is_bool_list">[docs]</a><span class="k">def</span> <span class="nf">is_bool_list</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Check that the value is a list of booleans.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> You can optionally specify the minimum and maximum number of members.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Each list member is checked that it is a boolean.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('bool_list', ())</span>
|
|
<span class="sd"> []</span>
|
|
<span class="sd"> >>> vtor.check('bool_list', [])</span>
|
|
<span class="sd"> []</span>
|
|
<span class="sd"> >>> check_res = vtor.check('bool_list', (True, False))</span>
|
|
<span class="sd"> >>> check_res == [True, False]</span>
|
|
<span class="sd"> 1</span>
|
|
<span class="sd"> >>> check_res = vtor.check('bool_list', [True, False])</span>
|
|
<span class="sd"> >>> check_res == [True, False]</span>
|
|
<span class="sd"> 1</span>
|
|
<span class="sd"> >>> vtor.check('bool_list', [True, 'a'])</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "a" is of the wrong type.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">is_boolean</span><span class="p">(</span><span class="n">mem</span><span class="p">)</span> <span class="k">for</span> <span class="n">mem</span> <span class="ow">in</span> <span class="n">is_list</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="p">)]</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="is_float_list"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.is_float_list">[docs]</a><span class="k">def</span> <span class="nf">is_float_list</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Check that the value is a list of floats.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> You can optionally specify the minimum and maximum number of members.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Each list member is checked that it is a float.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('float_list', ())</span>
|
|
<span class="sd"> []</span>
|
|
<span class="sd"> >>> vtor.check('float_list', [])</span>
|
|
<span class="sd"> []</span>
|
|
<span class="sd"> >>> vtor.check('float_list', (1, 2.0))</span>
|
|
<span class="sd"> [1.0, 2.0]</span>
|
|
<span class="sd"> >>> vtor.check('float_list', [1, 2.0])</span>
|
|
<span class="sd"> [1.0, 2.0]</span>
|
|
<span class="sd"> >>> vtor.check('float_list', [1, 'a'])</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "a" is of the wrong type.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">is_float</span><span class="p">(</span><span class="n">mem</span><span class="p">)</span> <span class="k">for</span> <span class="n">mem</span> <span class="ow">in</span> <span class="n">is_list</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="p">)]</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="is_string_list"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.is_string_list">[docs]</a><span class="k">def</span> <span class="nf">is_string_list</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Check that the value is a list of strings.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> You can optionally specify the minimum and maximum number of members.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Each list member is checked that it is a string.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('string_list', ())</span>
|
|
<span class="sd"> []</span>
|
|
<span class="sd"> >>> vtor.check('string_list', [])</span>
|
|
<span class="sd"> []</span>
|
|
<span class="sd"> >>> vtor.check('string_list', ('a', 'b'))</span>
|
|
<span class="sd"> ['a', 'b']</span>
|
|
<span class="sd"> >>> vtor.check('string_list', ['a', 1])</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "1" is of the wrong type.</span>
|
|
<span class="sd"> >>> vtor.check('string_list', 'hello')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "hello" is of the wrong type.</span>
|
|
<span class="sd"> """</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">basestring</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="n">VdtTypeError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">is_string</span><span class="p">(</span><span class="n">mem</span><span class="p">)</span> <span class="k">for</span> <span class="n">mem</span> <span class="ow">in</span> <span class="n">is_list</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="p">)]</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="is_ip_addr_list"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.is_ip_addr_list">[docs]</a><span class="k">def</span> <span class="nf">is_ip_addr_list</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Check that the value is a list of IP addresses.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> You can optionally specify the minimum and maximum number of members.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Each list member is checked that it is an IP address.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('ip_addr_list', ())</span>
|
|
<span class="sd"> []</span>
|
|
<span class="sd"> >>> vtor.check('ip_addr_list', [])</span>
|
|
<span class="sd"> []</span>
|
|
<span class="sd"> >>> vtor.check('ip_addr_list', ('1.2.3.4', '5.6.7.8'))</span>
|
|
<span class="sd"> ['1.2.3.4', '5.6.7.8']</span>
|
|
<span class="sd"> >>> vtor.check('ip_addr_list', ['a'])</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueError: the value "a" is unacceptable.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">is_ip_addr</span><span class="p">(</span><span class="n">mem</span><span class="p">)</span> <span class="k">for</span> <span class="n">mem</span> <span class="ow">in</span> <span class="n">is_list</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="p">)]</span>
|
|
|
|
</div>
|
|
<span class="k">def</span> <span class="nf">force_list</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Check that a value is a list, coercing strings into</span>
|
|
<span class="sd"> a list with one member. Useful where users forget the</span>
|
|
<span class="sd"> trailing comma that turns a single value into a list.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> You can optionally specify the minimum and maximum number of members.</span>
|
|
<span class="sd"> A minumum of greater than one will fail if the user only supplies a</span>
|
|
<span class="sd"> string.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('force_list', ())</span>
|
|
<span class="sd"> []</span>
|
|
<span class="sd"> >>> vtor.check('force_list', [])</span>
|
|
<span class="sd"> []</span>
|
|
<span class="sd"> >>> vtor.check('force_list', 'hello')</span>
|
|
<span class="sd"> ['hello']</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span>
|
|
<span class="k">return</span> <span class="n">is_list</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="p">)</span>
|
|
|
|
|
|
|
|
<span class="n">fun_dict</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s">'integer'</span><span class="p">:</span> <span class="n">is_integer</span><span class="p">,</span>
|
|
<span class="s">'float'</span><span class="p">:</span> <span class="n">is_float</span><span class="p">,</span>
|
|
<span class="s">'ip_addr'</span><span class="p">:</span> <span class="n">is_ip_addr</span><span class="p">,</span>
|
|
<span class="s">'string'</span><span class="p">:</span> <span class="n">is_string</span><span class="p">,</span>
|
|
<span class="s">'boolean'</span><span class="p">:</span> <span class="n">is_boolean</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
|
|
|
|
<div class="viewcode-block" id="is_mixed_list"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.is_mixed_list">[docs]</a><span class="k">def</span> <span class="nf">is_mixed_list</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Check that the value is a list.</span>
|
|
<span class="sd"> Allow specifying the type of each member.</span>
|
|
<span class="sd"> Work on lists of specific lengths.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> You specify each member as a positional argument specifying type</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Each type should be one of the following strings :</span>
|
|
<span class="sd"> 'integer', 'float', 'ip_addr', 'string', 'boolean'</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> So you can specify a list of two strings, followed by</span>
|
|
<span class="sd"> two integers as :</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> mixed_list('string', 'string', 'integer', 'integer')</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> The length of the list must match the number of positional</span>
|
|
<span class="sd"> arguments you supply.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> mix_str = "mixed_list('integer', 'float', 'ip_addr', 'string', 'boolean')"</span>
|
|
<span class="sd"> >>> check_res = vtor.check(mix_str, (1, 2.0, '1.2.3.4', 'a', True))</span>
|
|
<span class="sd"> >>> check_res == [1, 2.0, '1.2.3.4', 'a', True]</span>
|
|
<span class="sd"> 1</span>
|
|
<span class="sd"> >>> check_res = vtor.check(mix_str, ('1', '2.0', '1.2.3.4', 'a', 'True'))</span>
|
|
<span class="sd"> >>> check_res == [1, 2.0, '1.2.3.4', 'a', True]</span>
|
|
<span class="sd"> 1</span>
|
|
<span class="sd"> >>> vtor.check(mix_str, ('b', 2.0, '1.2.3.4', 'a', True))</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "b" is of the wrong type.</span>
|
|
<span class="sd"> >>> vtor.check(mix_str, (1, 2.0, '1.2.3.4', 'a'))</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooShortError: the value "(1, 2.0, '1.2.3.4', 'a')" is too short.</span>
|
|
<span class="sd"> >>> vtor.check(mix_str, (1, 2.0, '1.2.3.4', 'a', 1, 'b'))</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueTooLongError: the value "(1, 2.0, '1.2.3.4', 'a', 1, 'b')" is too long.</span>
|
|
<span class="sd"> >>> vtor.check(mix_str, 0)</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "0" is of the wrong type.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> This test requires an elaborate setup, because of a change in error string</span>
|
|
<span class="sd"> output from the interpreter between Python 2.2 and 2.3 .</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> res_seq = (</span>
|
|
<span class="sd"> ... 'passed an incorrect value "',</span>
|
|
<span class="sd"> ... 'yoda',</span>
|
|
<span class="sd"> ... '" for parameter "mixed_list".',</span>
|
|
<span class="sd"> ... )</span>
|
|
<span class="sd"> >>> res_str = "'".join(res_seq)</span>
|
|
<span class="sd"> >>> try:</span>
|
|
<span class="sd"> ... vtor.check('mixed_list("yoda")', ('a'))</span>
|
|
<span class="sd"> ... except VdtParamError, err:</span>
|
|
<span class="sd"> ... str(err) == res_str</span>
|
|
<span class="sd"> 1</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">length</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</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="n">VdtTypeError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">length</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="n">VdtValueTooShortError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">length</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="n">VdtValueTooLongError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">fun_dict</span><span class="p">[</span><span class="n">arg</span><span class="p">](</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">value</span><span class="p">)]</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">VdtParamError</span><span class="p">(</span><span class="s">'mixed_list'</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
|
|
|
|
</div>
|
|
<div class="viewcode-block" id="is_option"><a class="viewcode-back" href="../../../terminatorlib.configobj.html#terminatorlib.configobj.validate.is_option">[docs]</a><span class="k">def</span> <span class="nf">is_option</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="o">*</span><span class="n">options</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This check matches the value to any of a set of options.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> vtor.check('option("yoda", "jedi")', 'yoda')</span>
|
|
<span class="sd"> 'yoda'</span>
|
|
<span class="sd"> >>> vtor.check('option("yoda", "jedi")', 'jed')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtValueError: the value "jed" is unacceptable.</span>
|
|
<span class="sd"> >>> vtor.check('option("yoda", "jedi")', 0)</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> VdtTypeError: the value "0" is of the wrong type.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">basestring</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="n">VdtTypeError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">options</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">VdtValueError</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">value</span>
|
|
|
|
</div>
|
|
<span class="k">def</span> <span class="nf">_test</span><span class="p">(</span><span class="n">value</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">keywargs</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> A function that exists for test purposes.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> checks = [</span>
|
|
<span class="sd"> ... '3, 6, min=1, max=3, test=list(a, b, c)',</span>
|
|
<span class="sd"> ... '3',</span>
|
|
<span class="sd"> ... '3, 6',</span>
|
|
<span class="sd"> ... '3,',</span>
|
|
<span class="sd"> ... 'min=1, test="a b c"',</span>
|
|
<span class="sd"> ... 'min=5, test="a, b, c"',</span>
|
|
<span class="sd"> ... 'min=1, max=3, test="a, b, c"',</span>
|
|
<span class="sd"> ... 'min=-100, test=-99',</span>
|
|
<span class="sd"> ... 'min=1, max=3',</span>
|
|
<span class="sd"> ... '3, 6, test="36"',</span>
|
|
<span class="sd"> ... '3, 6, test="a, b, c"',</span>
|
|
<span class="sd"> ... '3, max=3, test=list("a", "b", "c")',</span>
|
|
<span class="sd"> ... '''3, max=3, test=list("'a'", 'b', "x=(c)")''',</span>
|
|
<span class="sd"> ... "test='x=fish(3)'",</span>
|
|
<span class="sd"> ... ]</span>
|
|
<span class="sd"> >>> v = Validator({'test': _test})</span>
|
|
<span class="sd"> >>> for entry in checks:</span>
|
|
<span class="sd"> ... print v.check(('test(%s)' % entry), 3)</span>
|
|
<span class="sd"> (3, ('3', '6'), {'test': ['a', 'b', 'c'], 'max': '3', 'min': '1'})</span>
|
|
<span class="sd"> (3, ('3',), {})</span>
|
|
<span class="sd"> (3, ('3', '6'), {})</span>
|
|
<span class="sd"> (3, ('3',), {})</span>
|
|
<span class="sd"> (3, (), {'test': 'a b c', 'min': '1'})</span>
|
|
<span class="sd"> (3, (), {'test': 'a, b, c', 'min': '5'})</span>
|
|
<span class="sd"> (3, (), {'test': 'a, b, c', 'max': '3', 'min': '1'})</span>
|
|
<span class="sd"> (3, (), {'test': '-99', 'min': '-100'})</span>
|
|
<span class="sd"> (3, (), {'max': '3', 'min': '1'})</span>
|
|
<span class="sd"> (3, ('3', '6'), {'test': '36'})</span>
|
|
<span class="sd"> (3, ('3', '6'), {'test': 'a, b, c'})</span>
|
|
<span class="sd"> (3, ('3',), {'test': ['a', 'b', 'c'], 'max': '3'})</span>
|
|
<span class="sd"> (3, ('3',), {'test': ["'a'", 'b', 'x=(c)'], 'max': '3'})</span>
|
|
<span class="sd"> (3, (), {'test': 'x=fish(3)'})</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> v = Validator()</span>
|
|
<span class="sd"> >>> v.check('integer(default=6)', '3')</span>
|
|
<span class="sd"> 3</span>
|
|
<span class="sd"> >>> v.check('integer(default=6)', None, True)</span>
|
|
<span class="sd"> 6</span>
|
|
<span class="sd"> >>> v.get_default_value('integer(default=6)')</span>
|
|
<span class="sd"> 6</span>
|
|
<span class="sd"> >>> v.get_default_value('float(default=6)')</span>
|
|
<span class="sd"> 6.0</span>
|
|
<span class="sd"> >>> v.get_default_value('pass(default=None)')</span>
|
|
<span class="sd"> >>> v.get_default_value("string(default='None')")</span>
|
|
<span class="sd"> 'None'</span>
|
|
<span class="sd"> >>> v.get_default_value('pass')</span>
|
|
<span class="sd"> Traceback (most recent call last):</span>
|
|
<span class="sd"> KeyError: 'Check "pass" has no default value.'</span>
|
|
<span class="sd"> >>> v.get_default_value('pass(default=list(1, 2, 3, 4))')</span>
|
|
<span class="sd"> ['1', '2', '3', '4']</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> v = Validator()</span>
|
|
<span class="sd"> >>> v.check("pass(default=None)", None, True)</span>
|
|
<span class="sd"> >>> v.check("pass(default='None')", None, True)</span>
|
|
<span class="sd"> 'None'</span>
|
|
<span class="sd"> >>> v.check('pass(default="None")', None, True)</span>
|
|
<span class="sd"> 'None'</span>
|
|
<span class="sd"> >>> v.check('pass(default=list(1, 2, 3, 4))', None, True)</span>
|
|
<span class="sd"> ['1', '2', '3', '4']</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> Bug test for unicode arguments</span>
|
|
<span class="sd"> >>> v = Validator()</span>
|
|
<span class="sd"> >>> v.check(u'string(min=4)', u'test')</span>
|
|
<span class="sd"> u'test'</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> v = Validator()</span>
|
|
<span class="sd"> >>> v.get_default_value(u'string(min=4, default="1234")')</span>
|
|
<span class="sd"> u'1234'</span>
|
|
<span class="sd"> >>> v.check(u'string(min=4, default="1234")', u'test')</span>
|
|
<span class="sd"> u'test'</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> >>> v = Validator()</span>
|
|
<span class="sd"> >>> default = v.get_default_value('string(default=None)')</span>
|
|
<span class="sd"> >>> default == None</span>
|
|
<span class="sd"> 1</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">keywargs</span><span class="p">)</span>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">_test2</span><span class="p">():</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> >>> </span>
|
|
<span class="sd"> >>> v = Validator()</span>
|
|
<span class="sd"> >>> v.get_default_value('string(default="#ff00dd")')</span>
|
|
<span class="sd"> '#ff00dd'</span>
|
|
<span class="sd"> >>> v.get_default_value('integer(default=3) # comment')</span>
|
|
<span class="sd"> 3</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_test3</span><span class="p">():</span>
|
|
<span class="sd">r"""</span>
|
|
<span class="sd"> >>> vtor.check('string(default="")', '', missing=True)</span>
|
|
<span class="sd"> ''</span>
|
|
<span class="sd"> >>> vtor.check('string(default="\n")', '', missing=True)</span>
|
|
<span class="sd"> '\n'</span>
|
|
<span class="sd"> >>> print vtor.check('string(default="\n")', '', missing=True),</span>
|
|
<span class="sd"> <BLANKLINE></span>
|
|
<span class="sd"> >>> vtor.check('string()', '\n')</span>
|
|
<span class="sd"> '\n'</span>
|
|
<span class="sd"> >>> vtor.check('string(default="\n\n\n")', '', missing=True)</span>
|
|
<span class="sd"> '\n\n\n'</span>
|
|
<span class="sd"> >>> vtor.check('string()', 'random \n text goes here\n\n')</span>
|
|
<span class="sd"> 'random \n text goes here\n\n'</span>
|
|
<span class="sd"> >>> vtor.check('string(default=" \nrandom text\ngoes \n here\n\n ")',</span>
|
|
<span class="sd"> ... '', missing=True)</span>
|
|
<span class="sd"> ' \nrandom text\ngoes \n here\n\n '</span>
|
|
<span class="sd"> >>> vtor.check("string(default='\n\n\n')", '', missing=True)</span>
|
|
<span class="sd"> '\n\n\n'</span>
|
|
<span class="sd"> >>> vtor.check("option('\n','a','b',default='\n')", '', missing=True)</span>
|
|
<span class="sd"> '\n'</span>
|
|
<span class="sd"> >>> vtor.check("string_list()", ['foo', '\n', 'bar'])</span>
|
|
<span class="sd"> ['foo', '\n', 'bar']</span>
|
|
<span class="sd"> >>> vtor.check("string_list(default=list('\n'))", '', missing=True)</span>
|
|
<span class="sd"> ['\n']</span>
|
|
<span class="sd"> """</span>
|
|
|
|
|
|
<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">'__main__'</span><span class="p">:</span>
|
|
<span class="c"># run the code tests in doctest format</span>
|
|
<span class="kn">import</span> <span class="nn">sys</span>
|
|
<span class="kn">import</span> <span class="nn">doctest</span>
|
|
<span class="n">m</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'__main__'</span><span class="p">)</span>
|
|
<span class="n">globs</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">__dict__</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
|
<span class="n">globs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span>
|
|
<span class="s">'vtor'</span><span class="p">:</span> <span class="n">Validator</span><span class="p">(),</span>
|
|
<span class="p">})</span>
|
|
<span class="n">doctest</span><span class="o">.</span><span class="n">testmod</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="n">globs</span><span class="o">=</span><span class="n">globs</span><span class="p">)</span>
|
|
</pre></div>
|
|
|
|
</div>
|
|
<footer>
|
|
|
|
|
|
<hr/>
|
|
|
|
<div role="contentinfo">
|
|
<p>
|
|
© Copyright 2015, Stephen Boddy, licensed under the CC-BY-SA..
|
|
</p>
|
|
</div>
|
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
|
|
</footer>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
var DOCUMENTATION_OPTIONS = {
|
|
URL_ROOT:'../../../',
|
|
VERSION:'0.98',
|
|
COLLAPSE_INDEX:false,
|
|
FILE_SUFFIX:'.html',
|
|
HAS_SOURCE: true
|
|
};
|
|
</script>
|
|
<script type="text/javascript" src="../../../_static/jquery.js"></script>
|
|
<script type="text/javascript" src="../../../_static/underscore.js"></script>
|
|
<script type="text/javascript" src="../../../_static/doctools.js"></script>
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
jQuery(function () {
|
|
SphinxRtdTheme.StickyNav.enable();
|
|
});
|
|
</script>
|
|
|
|
|
|
</body>
|
|
</html> |