diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/_build/doctrees/environment.pickle | bin | 145406 -> 175229 bytes | |||
| -rw-r--r-- | docs/_build/doctrees/index.doctree | bin | 4866 -> 4899 bytes | |||
| -rw-r--r-- | docs/_build/doctrees/modules.doctree | bin | 2517 -> 2562 bytes | |||
| -rw-r--r-- | docs/_build/doctrees/voluptuous.doctree | bin | 284212 -> 318146 bytes | |||
| -rw-r--r-- | docs/_build/doctrees/voluptuous.tests.doctree | bin | 112046 -> 160419 bytes | |||
| -rw-r--r-- | docs/_build/html/_modules/voluptuous/error.html | 14 | ||||
| -rw-r--r-- | docs/_build/html/_modules/voluptuous/schema_builder.html | 245 | ||||
| -rw-r--r-- | docs/_build/html/_modules/voluptuous/tests/tests.html | 659 | ||||
| -rw-r--r-- | docs/_build/html/_modules/voluptuous/util.html | 17 | ||||
| -rw-r--r-- | docs/_build/html/_modules/voluptuous/validators.html | 263 | ||||
| -rw-r--r-- | docs/_build/html/genindex.html | 200 | ||||
| -rw-r--r-- | docs/_build/html/objects.inv | bin | 1572 -> 1844 bytes | |||
| -rw-r--r-- | docs/_build/html/searchindex.js | 2 | ||||
| -rw-r--r-- | docs/_build/html/voluptuous.html | 160 | ||||
| -rw-r--r-- | docs/_build/html/voluptuous.tests.html | 220 |
15 files changed, 1505 insertions, 275 deletions
diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle Binary files differindex 60b5476..128a9f4 100644 --- a/docs/_build/doctrees/environment.pickle +++ b/docs/_build/doctrees/environment.pickle diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree Binary files differindex 40b0bbe..e5e3205 100644 --- a/docs/_build/doctrees/index.doctree +++ b/docs/_build/doctrees/index.doctree diff --git a/docs/_build/doctrees/modules.doctree b/docs/_build/doctrees/modules.doctree Binary files differindex 99ca649..a7e9f71 100644 --- a/docs/_build/doctrees/modules.doctree +++ b/docs/_build/doctrees/modules.doctree diff --git a/docs/_build/doctrees/voluptuous.doctree b/docs/_build/doctrees/voluptuous.doctree Binary files differindex 5cd1eda..7194dad 100644 --- a/docs/_build/doctrees/voluptuous.doctree +++ b/docs/_build/doctrees/voluptuous.doctree diff --git a/docs/_build/doctrees/voluptuous.tests.doctree b/docs/_build/doctrees/voluptuous.tests.doctree Binary files differindex 1b9a506..b0dada3 100644 --- a/docs/_build/doctrees/voluptuous.tests.doctree +++ b/docs/_build/doctrees/voluptuous.tests.doctree diff --git a/docs/_build/html/_modules/voluptuous/error.html b/docs/_build/html/_modules/voluptuous/error.html index de5b09b..240357a 100644 --- a/docs/_build/html/_modules/voluptuous/error.html +++ b/docs/_build/html/_modules/voluptuous/error.html @@ -144,6 +144,10 @@ <span class="sd">"""The value was found invalid by evaluation function."""</span></div> +<div class="viewcode-block" id="ContainsInvalid"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.error.ContainsInvalid">[docs]</a><span class="k">class</span> <span class="nc">ContainsInvalid</span><span class="p">(</span><span class="n">Invalid</span><span class="p">):</span> + <span class="sd">"""List does not contain item"""</span></div> + + <div class="viewcode-block" id="ScalarInvalid"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.error.ScalarInvalid">[docs]</a><span class="k">class</span> <span class="nc">ScalarInvalid</span><span class="p">(</span><span class="n">Invalid</span><span class="p">):</span> <span class="sd">"""Scalars did not match."""</span></div> @@ -226,6 +230,16 @@ <div class="viewcode-block" id="ExactSequenceInvalid"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.error.ExactSequenceInvalid">[docs]</a><span class="k">class</span> <span class="nc">ExactSequenceInvalid</span><span class="p">(</span><span class="n">Invalid</span><span class="p">):</span> <span class="k">pass</span></div> + + +<div class="viewcode-block" id="NotEnoughValid"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.error.NotEnoughValid">[docs]</a><span class="k">class</span> <span class="nc">NotEnoughValid</span><span class="p">(</span><span class="n">Invalid</span><span class="p">):</span> + <span class="sd">"""The value did not pass enough validations."""</span> + <span class="k">pass</span></div> + + +<div class="viewcode-block" id="TooManyValid"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.error.TooManyValid">[docs]</a><span class="k">class</span> <span class="nc">TooManyValid</span><span class="p">(</span><span class="n">Invalid</span><span class="p">):</span> + <span class="sd">"""The value passed more than expected validations."""</span> + <span class="k">pass</span></div> </pre></div> </div> diff --git a/docs/_build/html/_modules/voluptuous/schema_builder.html b/docs/_build/html/_modules/voluptuous/schema_builder.html index d715ad5..8309cab 100644 --- a/docs/_build/html/_modules/voluptuous/schema_builder.html +++ b/docs/_build/html/_modules/voluptuous/schema_builder.html @@ -48,10 +48,8 @@ <span class="kn">import</span> <span class="nn">sys</span> <span class="kn">from</span> <span class="nn">contextlib</span> <span class="kn">import</span> <span class="n">contextmanager</span> -<span class="k">try</span><span class="p">:</span> - <span class="kn">import</span> <span class="nn">error</span> <span class="kn">as</span> <span class="nn">er</span> -<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> - <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">error</span> <span class="k">as</span> <span class="n">er</span> +<span class="kn">import</span> <span class="nn">itertools</span> +<span class="kn">from</span> <span class="nn">voluptuous</span> <span class="kn">import</span> <span class="n">error</span> <span class="k">as</span> <span class="n">er</span> <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span> <span class="o">>=</span> <span class="p">(</span><span class="mi">3</span><span class="p">,):</span> <span class="nb">long</span> <span class="o">=</span> <span class="nb">int</span> @@ -153,6 +151,9 @@ <span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s1">'_fields'</span><span class="p">)</span> +<span class="n">primitive_types</span> <span class="o">=</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">unicode</span><span class="p">,</span> <span class="nb">bool</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span> + + <div class="viewcode-block" id="Undefined"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.schema_builder.Undefined">[docs]</a><span class="k">class</span> <span class="nc">Undefined</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__nonzero__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="bp">False</span> @@ -164,6 +165,10 @@ <span class="n">UNDEFINED</span> <span class="o">=</span> <span class="n">Undefined</span><span class="p">()</span> +<div class="viewcode-block" id="Self"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.schema_builder.Self">[docs]</a><span class="k">def</span> <span class="nf">Self</span><span class="p">():</span> + <span class="k">raise</span> <span class="n">er</span><span class="o">.</span><span class="n">SchemaError</span><span class="p">(</span><span class="s1">'"Self" should never be called'</span><span class="p">)</span></div> + + <div class="viewcode-block" id="default_factory"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.schema_builder.default_factory">[docs]</a><span class="k">def</span> <span class="nf">default_factory</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="ow">is</span> <span class="n">UNDEFINED</span> <span class="ow">or</span> <span class="nb">callable</span><span class="p">(</span><span class="n">value</span><span class="p">):</span> <span class="k">return</span> <span class="n">value</span> @@ -239,11 +244,57 @@ <span class="bp">self</span><span class="o">.</span><span class="n">extra</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">extra</span><span class="p">)</span> <span class="c1"># ensure the value is an integer</span> <span class="bp">self</span><span class="o">.</span><span class="n">_compiled</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_compile</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> + <span class="nd">@classmethod</span> +<div class="viewcode-block" id="Schema.infer"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.schema_builder.Schema.infer">[docs]</a> <span class="k">def</span> <span class="nf">infer</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""Create a Schema from concrete data (e.g. an API response).</span> + +<span class="sd"> For example, this will take a dict like:</span> + +<span class="sd"> {</span> +<span class="sd"> 'foo': 1,</span> +<span class="sd"> 'bar': {</span> +<span class="sd"> 'a': True,</span> +<span class="sd"> 'b': False</span> +<span class="sd"> },</span> +<span class="sd"> 'baz': ['purple', 'monkey', 'dishwasher']</span> +<span class="sd"> }</span> + +<span class="sd"> And return a Schema:</span> + +<span class="sd"> {</span> +<span class="sd"> 'foo': int,</span> +<span class="sd"> 'bar': {</span> +<span class="sd"> 'a': bool,</span> +<span class="sd"> 'b': bool</span> +<span class="sd"> },</span> +<span class="sd"> 'baz': [str]</span> +<span class="sd"> }</span> + +<span class="sd"> Note: only very basic inference is supported.</span> +<span class="sd"> """</span> + <span class="k">def</span> <span class="nf">value_to_schema_type</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">dict</span><span class="p">):</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="k">return</span> <span class="nb">dict</span> + <span class="k">return</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">value_to_schema_type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> + <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">iteritems</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">list</span><span class="p">):</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="k">return</span> <span class="nb">list</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="p">[</span><span class="n">value_to_schema_type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> + <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">]</span> + <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">cls</span><span class="p">(</span><span class="n">value_to_schema_type</span><span class="p">(</span><span class="n">data</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div> + <span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> - <span class="k">if</span> <span class="nb">str</span><span class="p">(</span><span class="n">other</span><span class="p">)</span> <span class="o">==</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">):</span> - <span class="c1"># Because repr is combination mixture of object and schema</span> - <span class="k">return</span> <span class="bp">True</span> - <span class="k">return</span> <span class="bp">False</span> + <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Schema</span><span class="p">):</span> + <span class="k">return</span> <span class="bp">False</span> + <span class="k">return</span> <span class="n">other</span><span class="o">.</span><span class="n">schema</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> + + <span class="k">def</span> <span class="nf">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> + <span class="k">return</span> <span class="ow">not</span> <span class="p">(</span><span class="bp">self</span> <span class="o">==</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">)</span> @@ -266,18 +317,24 @@ <span class="k">def</span> <span class="nf">_compile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">):</span> <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="n">Extra</span><span class="p">:</span> <span class="k">return</span> <span class="k">lambda</span> <span class="n">_</span><span class="p">,</span> <span class="n">v</span><span class="p">:</span> <span class="n">v</span> + <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="n">Self</span><span class="p">:</span> + <span class="k">return</span> <span class="k">lambda</span> <span class="n">p</span><span class="p">,</span> <span class="n">v</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_compiled</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> + <span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="s2">"__voluptuous_compile__"</span><span class="p">):</span> + <span class="k">return</span> <span class="n">schema</span><span class="o">.</span><span class="n">__voluptuous_compile__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">Object</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_compile_object</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> - <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">collections</span><span class="o">.</span><span class="n">Mapping</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">schema</span><span class="p">):</span> + <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">collections</span><span class="o">.</span><span class="n">Mapping</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_compile_dict</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> - <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">schema</span><span class="p">):</span> + <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_compile_list</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_compile_tuple</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> + <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="p">(</span><span class="nb">frozenset</span><span class="p">,</span> <span class="nb">set</span><span class="p">)):</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_compile_set</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> <span class="n">type_</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> - <span class="k">if</span> <span class="n">type_</span> <span class="ow">is</span> <span class="nb">type</span><span class="p">:</span> + <span class="k">if</span> <span class="n">inspect</span><span class="o">.</span><span class="n">isclass</span><span class="p">(</span><span class="n">schema</span><span class="p">):</span> <span class="n">type_</span> <span class="o">=</span> <span class="n">schema</span> - <span class="k">if</span> <span class="n">type_</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">bool</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">str</span><span class="p">,</span> <span class="nb">unicode</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">complex</span><span class="p">,</span> <span class="nb">object</span><span class="p">,</span> + <span class="k">if</span> <span class="n">type_</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="nb">bytes</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">str</span><span class="p">,</span> <span class="nb">unicode</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">complex</span><span class="p">,</span> <span class="nb">object</span><span class="p">,</span> <span class="nb">list</span><span class="p">,</span> <span class="nb">dict</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="bp">None</span><span class="p">))</span> <span class="ow">or</span> <span class="nb">callable</span><span class="p">(</span><span class="n">schema</span><span class="p">):</span> <span class="k">return</span> <span class="n">_compile_scalar</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> <span class="k">raise</span> <span class="n">er</span><span class="o">.</span><span class="n">SchemaError</span><span class="p">(</span><span class="s1">'unsupported schema data type </span><span class="si">%r</span><span class="s1">'</span> <span class="o">%</span> @@ -306,24 +363,50 @@ <span class="n">candidates</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">_iterate_mapping_candidates</span><span class="p">(</span><span class="n">_compiled_schema</span><span class="p">))</span> + <span class="c1"># After we have the list of candidates in the correct order, we want to apply some optimization so that each</span> + <span class="c1"># key in the data being validated will be matched against the relevant schema keys only.</span> + <span class="c1"># No point in matching against different keys</span> + <span class="n">additional_candidates</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">candidates_by_key</span> <span class="o">=</span> <span class="p">{}</span> + <span class="k">for</span> <span class="n">skey</span><span class="p">,</span> <span class="p">(</span><span class="n">ckey</span><span class="p">,</span> <span class="n">cvalue</span><span class="p">)</span> <span class="ow">in</span> <span class="n">candidates</span><span class="p">:</span> + <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">skey</span><span class="p">)</span> <span class="ow">in</span> <span class="n">primitive_types</span><span class="p">:</span> + <span class="n">candidates_by_key</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">skey</span><span class="p">,</span> <span class="p">[])</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">skey</span><span class="p">,</span> <span class="p">(</span><span class="n">ckey</span><span class="p">,</span> <span class="n">cvalue</span><span class="p">)))</span> + <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">skey</span><span class="p">,</span> <span class="n">Marker</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">skey</span><span class="o">.</span><span class="n">schema</span><span class="p">)</span> <span class="ow">in</span> <span class="n">primitive_types</span><span class="p">:</span> + <span class="n">candidates_by_key</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">skey</span><span class="o">.</span><span class="n">schema</span><span class="p">,</span> <span class="p">[])</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">skey</span><span class="p">,</span> <span class="p">(</span><span class="n">ckey</span><span class="p">,</span> <span class="n">cvalue</span><span class="p">)))</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># These are wildcards such as 'int', 'str', 'Remove' and others which should be applied to all keys</span> + <span class="n">additional_candidates</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">skey</span><span class="p">,</span> <span class="p">(</span><span class="n">ckey</span><span class="p">,</span> <span class="n">cvalue</span><span class="p">)))</span> + <span class="k">def</span> <span class="nf">validate_mapping</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">iterable</span><span class="p">,</span> <span class="n">out</span><span class="p">):</span> - <span class="k">try</span><span class="p">:</span> - <span class="kn">from</span> <span class="nn">util</span> <span class="kn">import</span> <span class="n">to_utf8_py2</span> - <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> - <span class="kn">from</span> <span class="nn">.util</span> <span class="kn">import</span> <span class="n">to_utf8_py2</span> <span class="n">required_keys</span> <span class="o">=</span> <span class="n">all_required_keys</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> - <span class="c1"># keeps track of all default keys that haven't been filled</span> - <span class="n">default_keys</span> <span class="o">=</span> <span class="n">all_default_keys</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + + <span class="c1"># Build a map of all provided key-value pairs.</span> + <span class="c1"># The type(out) is used to retain ordering in case a ordered</span> + <span class="c1"># map type is provided as input.</span> + <span class="n">key_value_map</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">out</span><span class="p">)()</span> + <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">iterable</span><span class="p">:</span> + <span class="n">key_value_map</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span> + + <span class="c1"># Insert default values for non-existing keys.</span> + <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">all_default_keys</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">key</span><span class="o">.</span><span class="n">default</span><span class="p">,</span> <span class="n">Undefined</span><span class="p">)</span> <span class="ow">and</span> \ + <span class="n">key</span><span class="o">.</span><span class="n">schema</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">key_value_map</span><span class="p">:</span> + <span class="c1"># A default value has been specified for this missing</span> + <span class="c1"># key, insert it.</span> + <span class="n">key_value_map</span><span class="p">[</span><span class="n">key</span><span class="o">.</span><span class="n">schema</span><span class="p">]</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">default</span><span class="p">()</span> + <span class="n">error</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span> - <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">iterable</span><span class="p">:</span> - <span class="n">key</span> <span class="o">=</span> <span class="n">to_utf8_py2</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> + <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">key_value_map</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> <span class="n">key_path</span> <span class="o">=</span> <span class="n">path</span> <span class="o">+</span> <span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="n">remove_key</span> <span class="o">=</span> <span class="bp">False</span> + <span class="c1"># Optimization. Validate against the matching key first, then fallback to the rest</span> + <span class="n">relevant_candidates</span> <span class="o">=</span> <span class="n">itertools</span><span class="o">.</span><span class="n">chain</span><span class="p">(</span><span class="n">candidates_by_key</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="p">[]),</span> <span class="n">additional_candidates</span><span class="p">)</span> + <span class="c1"># compare each given key/value against all compiled key/values</span> <span class="c1"># schema key, (compiled key, compiled value)</span> - <span class="k">for</span> <span class="n">skey</span><span class="p">,</span> <span class="p">(</span><span class="n">ckey</span><span class="p">,</span> <span class="n">cvalue</span><span class="p">)</span> <span class="ow">in</span> <span class="n">candidates</span><span class="p">:</span> + <span class="k">for</span> <span class="n">skey</span><span class="p">,</span> <span class="p">(</span><span class="n">ckey</span><span class="p">,</span> <span class="n">cvalue</span><span class="p">)</span> <span class="ow">in</span> <span class="n">relevant_candidates</span><span class="p">:</span> <span class="k">try</span><span class="p">:</span> <span class="n">new_key</span> <span class="o">=</span> <span class="n">ckey</span><span class="p">(</span><span class="n">key_path</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> <span class="k">except</span> <span class="n">er</span><span class="o">.</span><span class="n">Invalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> @@ -364,12 +447,10 @@ <span class="n">required_keys</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">skey</span><span class="p">)</span> <span class="k">break</span> - <span class="c1"># Key and value okay, mark any Required() fields as found.</span> + <span class="c1"># Key and value okay, mark as found in case it was</span> + <span class="c1"># a Required() field.</span> <span class="n">required_keys</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">skey</span><span class="p">)</span> - <span class="c1"># No need for a default if it was filled</span> - <span class="n">default_keys</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">skey</span><span class="p">)</span> - <span class="k">break</span> <span class="k">else</span><span class="p">:</span> <span class="k">if</span> <span class="n">remove_key</span><span class="p">:</span> @@ -381,13 +462,6 @@ <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">er</span><span class="o">.</span><span class="n">Invalid</span><span class="p">(</span><span class="s1">'extra keys not allowed'</span><span class="p">,</span> <span class="n">key_path</span><span class="p">))</span> <span class="c1"># else REMOVE_EXTRA: ignore the key so it's removed from output</span> - <span class="c1"># set defaults for any that can have defaults</span> - <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">default_keys</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">key</span><span class="o">.</span><span class="n">default</span><span class="p">,</span> <span class="n">Undefined</span><span class="p">):</span> <span class="c1"># if the user provides a default with the node</span> - <span class="n">out</span><span class="p">[</span><span class="n">key</span><span class="o">.</span><span class="n">schema</span><span class="p">]</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">default</span><span class="p">()</span> - <span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">required_keys</span><span class="p">:</span> - <span class="n">required_keys</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> - <span class="c1"># for any required keys left that weren't found and don't have defaults:</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">required_keys</span><span class="p">:</span> <span class="n">msg</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">msg</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="s1">'msg'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">key</span><span class="o">.</span><span class="n">msg</span> <span class="k">else</span> <span class="s1">'required key not provided'</span> @@ -438,7 +512,7 @@ <span class="sd"> A dictionary schema will only validate a dictionary:</span> -<span class="sd"> >>> validate = Schema({'prop': str})</span> +<span class="sd"> >>> validate = Schema({})</span> <span class="sd"> >>> with raises(er.MultipleInvalid, 'expected a dictionary'):</span> <span class="sd"> ... validate([])</span> @@ -453,6 +527,7 @@ <span class="sd"> >>> with raises(er.MultipleInvalid, "extra keys not allowed @ data['two']"):</span> <span class="sd"> ... validate({'two': 'three'})</span> + <span class="sd"> Validation function, in this case the "int" type:</span> <span class="sd"> >>> validate = Schema({'one': 'two', 'three': 'four', int: str})</span> @@ -462,17 +537,10 @@ <span class="sd"> >>> validate({10: 'twenty'})</span> <span class="sd"> {10: 'twenty'}</span> -<span class="sd"> An empty dictionary is matched as value:</span> - -<span class="sd"> >>> validate = Schema({})</span> -<span class="sd"> >>> with raises(er.MultipleInvalid, 'not a valid value'):</span> -<span class="sd"> ... validate([])</span> - <span class="sd"> By default, a "type" in the schema (in this case "int") will be used</span> <span class="sd"> purely to validate that the corresponding value is of that type. It</span> <span class="sd"> will not Coerce the value:</span> -<span class="sd"> >>> validate = Schema({'one': 'two', 'three': 'four', int: str})</span> <span class="sd"> >>> with raises(er.MultipleInvalid, "extra keys not allowed @ data['10']"):</span> <span class="sd"> ... validate({'10': 'twenty'})</span> @@ -560,7 +628,7 @@ <span class="k">if</span> <span class="n">errors</span><span class="p">:</span> <span class="k">raise</span> <span class="n">er</span><span class="o">.</span><span class="n">MultipleInvalid</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span> - <span class="n">out</span> <span class="o">=</span> <span class="p">{}</span> + <span class="n">out</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">__class__</span><span class="p">()</span> <span class="k">return</span> <span class="n">base_validate</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">iteritems</span><span class="p">(</span><span class="n">data</span><span class="p">),</span> <span class="n">out</span><span class="p">)</span> <span class="k">return</span> <span class="n">validate_dict</span> @@ -587,6 +655,10 @@ <span class="c1"># Empty seq schema, allow any data.</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">schema</span><span class="p">:</span> + <span class="k">if</span> <span class="n">data</span><span class="p">:</span> + <span class="k">raise</span> <span class="n">er</span><span class="o">.</span><span class="n">MultipleInvalid</span><span class="p">([</span> + <span class="n">er</span><span class="o">.</span><span class="n">ValueInvalid</span><span class="p">(</span><span class="s1">'not a valid value'</span><span class="p">,</span> <span class="p">[</span><span class="n">value</span><span class="p">])</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">data</span> + <span class="p">])</span> <span class="k">return</span> <span class="n">data</span> <span class="n">out</span> <span class="o">=</span> <span class="p">[]</span> @@ -648,6 +720,46 @@ <span class="sd"> """</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_compile_sequence</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> + <span class="k">def</span> <span class="nf">_compile_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">):</span> + <span class="sd">"""Validate a set.</span> + +<span class="sd"> A set is an unordered collection of unique elements.</span> + +<span class="sd"> >>> validator = Schema({int})</span> +<span class="sd"> >>> validator(set([42])) == set([42])</span> +<span class="sd"> True</span> +<span class="sd"> >>> with raises(er.Invalid, 'expected a set'):</span> +<span class="sd"> ... validator(42)</span> +<span class="sd"> >>> with raises(er.MultipleInvalid, 'invalid value in set'):</span> +<span class="sd"> ... validator(set(['a']))</span> +<span class="sd"> """</span> + <span class="n">type_</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span> + <span class="n">type_name</span> <span class="o">=</span> <span class="n">type_</span><span class="o">.</span><span class="n">__name__</span> + + <span class="k">def</span> <span class="nf">validate_set</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">data</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">data</span><span class="p">,</span> <span class="n">type_</span><span class="p">):</span> + <span class="k">raise</span> <span class="n">er</span><span class="o">.</span><span class="n">Invalid</span><span class="p">(</span><span class="s1">'expected a </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="n">type_name</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span> + + <span class="n">_compiled</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_compile</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">schema</span><span class="p">]</span> + <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span> + <span class="k">for</span> <span class="n">validate</span> <span class="ow">in</span> <span class="n">_compiled</span><span class="p">:</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">validate</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> + <span class="k">break</span> + <span class="k">except</span> <span class="n">er</span><span class="o">.</span><span class="n">Invalid</span><span class="p">:</span> + <span class="k">pass</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">invalid</span> <span class="o">=</span> <span class="n">er</span><span class="o">.</span><span class="n">Invalid</span><span class="p">(</span><span class="s1">'invalid value in </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="n">type_name</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span> + <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">invalid</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">errors</span><span class="p">:</span> + <span class="k">raise</span> <span class="n">er</span><span class="o">.</span><span class="n">MultipleInvalid</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">data</span> + + <span class="k">return</span> <span class="n">validate_set</span> + <div class="viewcode-block" id="Schema.extend"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.schema_builder.Schema.extend">[docs]</a> <span class="k">def</span> <span class="nf">extend</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">extra</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="sd">"""Create a new `Schema` by merging this and the provided `schema`.</span> @@ -677,7 +789,7 @@ <span class="c1"># for each item in the extension schema, replace duplicates</span> <span class="c1"># or add new keys</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">iteritems</span><span class="p">(</span><span class="n">schema</span><span class="p">):</span> - + <span class="c1"># if the key is already in the dictionary, we need to replace it</span> <span class="c1"># transform key to literal before checking presence</span> <span class="k">if</span> <span class="n">key_literal</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="ow">in</span> <span class="n">result_key_map</span><span class="p">:</span> @@ -726,7 +838,7 @@ <span class="sd"> >>> with raises(er.Invalid, 'not a valid value'):</span> <span class="sd"> ... _compile_scalar(lambda v: float(v))([], 'a')</span> <span class="sd"> """</span> - <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="nb">type</span><span class="p">):</span> + <span class="k">if</span> <span class="n">inspect</span><span class="o">.</span><span class="n">isclass</span><span class="p">(</span><span class="n">schema</span><span class="p">):</span> <span class="k">def</span> <span class="nf">validate_instance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">schema</span><span class="p">):</span> <span class="k">return</span> <span class="n">data</span> @@ -829,7 +941,6 @@ <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">slots</span><span class="p">:</span> <span class="k">if</span> <span class="n">key</span> <span class="o">!=</span> <span class="s1">'__dict__'</span><span class="p">:</span> <span class="k">yield</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">key</span><span class="p">))</span> - <span class="k">raise</span> <span class="ne">StopIteration</span><span class="p">()</span> <div class="viewcode-block" id="Msg"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.schema_builder.Msg">[docs]</a><span class="k">class</span> <span class="nc">Msg</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> @@ -905,15 +1016,11 @@ <div class="viewcode-block" id="Marker"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.schema_builder.Marker">[docs]</a><span class="k">class</span> <span class="nc">Marker</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">"""Mark nodes for special treatment."""</span> - <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">schema_</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> - <span class="k">try</span><span class="p">:</span> - <span class="kn">from</span> <span class="nn">util</span> <span class="kn">import</span> <span class="n">to_utf8_py2</span> - <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> - <span class="kn">from</span> <span class="nn">.util</span> <span class="kn">import</span> <span class="n">to_utf8_py2</span> - <span class="n">schema_</span> <span class="o">=</span> <span class="n">to_utf8_py2</span><span class="p">(</span><span class="n">schema_</span><span class="p">)</span> + <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">schema_</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema_</span> <span class="bp">self</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="n">schema_</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span> + <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">description</span> <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">v</span><span class="p">):</span> <span class="k">try</span><span class="p">:</span> @@ -930,7 +1037,18 @@ <span class="k">return</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__lt__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> - <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o"><</span> <span class="n">other</span><span class="o">.</span><span class="n">schema</span></div> + <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Marker</span><span class="p">):</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o"><</span> <span class="n">other</span><span class="o">.</span><span class="n">schema</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o"><</span> <span class="n">other</span> + + <span class="k">def</span> <span class="nf">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">==</span> <span class="n">other</span> + + <span class="k">def</span> <span class="nf">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> + <span class="k">return</span> <span class="ow">not</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">==</span> <span class="n">other</span><span class="p">)</span></div> <div class="viewcode-block" id="Optional"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.schema_builder.Optional">[docs]</a><span class="k">class</span> <span class="nc">Optional</span><span class="p">(</span><span class="n">Marker</span><span class="p">):</span> @@ -956,8 +1074,9 @@ <span class="sd"> {'key2': 'value'}</span> <span class="sd"> """</span> - <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">schema</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">UNDEFINED</span><span class="p">):</span> - <span class="nb">super</span><span class="p">(</span><span class="n">Optional</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="n">msg</span><span class="p">)</span> + <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">schema</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">UNDEFINED</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> + <span class="nb">super</span><span class="p">(</span><span class="n">Optional</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="n">msg</span><span class="p">,</span> + <span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">default</span> <span class="o">=</span> <span class="n">default_factory</span><span class="p">(</span><span class="n">default</span><span class="p">)</span></div> @@ -997,15 +1116,16 @@ <span class="sd"> ... 'social': {'social_network': 'barfoo', 'token': 'tEMp'}})</span> <span class="sd"> """</span> - <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">schema</span><span class="p">,</span> <span class="n">group_of_exclusion</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> - <span class="nb">super</span><span class="p">(</span><span class="n">Exclusive</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="n">msg</span><span class="p">)</span> + <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">schema</span><span class="p">,</span> <span class="n">group_of_exclusion</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> + <span class="nb">super</span><span class="p">(</span><span class="n">Exclusive</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="n">msg</span><span class="p">,</span> + <span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">group_of_exclusion</span> <span class="o">=</span> <span class="n">group_of_exclusion</span></div> <div class="viewcode-block" id="Inclusive"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.schema_builder.Inclusive">[docs]</a><span class="k">class</span> <span class="nc">Inclusive</span><span class="p">(</span><span class="n">Optional</span><span class="p">):</span> <span class="sd">""" Mark a node in the schema as inclusive.</span> -<span class="sd"> Exclusive keys inherited from Optional:</span> +<span class="sd"> Inclusive keys inherited from Optional:</span> <span class="sd"> >>> schema = Schema({</span> <span class="sd"> ... Inclusive('filename', 'file'): str,</span> @@ -1064,8 +1184,9 @@ <span class="sd"> {'key': []}</span> <span class="sd"> """</span> - <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">schema</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">UNDEFINED</span><span class="p">):</span> - <span class="nb">super</span><span class="p">(</span><span class="n">Required</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="n">msg</span><span class="p">)</span> + <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">schema</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">UNDEFINED</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> + <span class="nb">super</span><span class="p">(</span><span class="n">Required</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="n">msg</span><span class="p">,</span> + <span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">default</span> <span class="o">=</span> <span class="n">default_factory</span><span class="p">(</span><span class="n">default</span><span class="p">)</span></div> @@ -1089,7 +1210,10 @@ <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span> <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> - <span class="k">return</span> <span class="s2">"Remove(</span><span class="si">%r</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">,)</span></div> + <span class="k">return</span> <span class="s2">"Remove(</span><span class="si">%r</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">,)</span> + + <span class="k">def</span> <span class="nf">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">return</span> <span class="nb">object</span><span class="o">.</span><span class="n">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div> <div class="viewcode-block" id="message"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.schema_builder.message">[docs]</a><span class="k">def</span> <span class="nf">message</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">cls</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> @@ -1194,7 +1318,8 @@ <span class="n">returns</span> <span class="o">=</span> <span class="n">schema_arguments</span><span class="p">[</span><span class="n">RETURNS_KEY</span><span class="p">]</span> <span class="k">del</span> <span class="n">schema_arguments</span><span class="p">[</span><span class="n">RETURNS_KEY</span><span class="p">]</span> - <span class="n">input_schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="n">schema_arguments</span><span class="p">)</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">schema_arguments</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span> <span class="k">else</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> + <span class="n">input_schema</span> <span class="o">=</span> <span class="p">(</span><span class="n">Schema</span><span class="p">(</span><span class="n">schema_arguments</span><span class="p">,</span> <span class="n">extra</span><span class="o">=</span><span class="n">ALLOW_EXTRA</span><span class="p">)</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">schema_arguments</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span> <span class="k">else</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">)</span> <span class="n">output_schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="n">returns</span><span class="p">)</span> <span class="k">if</span> <span class="n">returns_defined</span> <span class="k">else</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> <span class="nd">@wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)</span> diff --git a/docs/_build/html/_modules/voluptuous/tests/tests.html b/docs/_build/html/_modules/voluptuous/tests/tests.html index ca19f2d..373fc6d 100644 --- a/docs/_build/html/_modules/voluptuous/tests/tests.html +++ b/docs/_build/html/_modules/voluptuous/tests/tests.html @@ -43,16 +43,20 @@ <h1>Source code for voluptuous.tests.tests</h1><div class="highlight"><pre> <span></span><span class="kn">import</span> <span class="nn">copy</span> <span class="kn">import</span> <span class="nn">collections</span> -<span class="kn">from</span> <span class="nn">nose.tools</span> <span class="kn">import</span> <span class="n">assert_equal</span><span class="p">,</span> <span class="n">assert_raises</span><span class="p">,</span> <span class="n">assert_true</span> +<span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">sys</span> + +<span class="kn">from</span> <span class="nn">nose.tools</span> <span class="kn">import</span> <span class="n">assert_equal</span><span class="p">,</span> <span class="n">assert_false</span><span class="p">,</span> <span class="n">assert_raises</span><span class="p">,</span> <span class="n">assert_true</span> <span class="kn">from</span> <span class="nn">voluptuous</span> <span class="kn">import</span> <span class="p">(</span> - <span class="n">Schema</span><span class="p">,</span> <span class="n">Required</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Extra</span><span class="p">,</span> <span class="n">Invalid</span><span class="p">,</span> <span class="n">In</span><span class="p">,</span> <span class="n">Remove</span><span class="p">,</span> <span class="n">Literal</span><span class="p">,</span> - <span class="n">Url</span><span class="p">,</span> <span class="n">MultipleInvalid</span><span class="p">,</span> <span class="n">LiteralInvalid</span><span class="p">,</span> <span class="n">NotIn</span><span class="p">,</span> <span class="n">Match</span><span class="p">,</span> <span class="n">Email</span><span class="p">,</span> + <span class="n">Schema</span><span class="p">,</span> <span class="n">Required</span><span class="p">,</span> <span class="n">Exclusive</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Extra</span><span class="p">,</span> <span class="n">Invalid</span><span class="p">,</span> <span class="n">In</span><span class="p">,</span> <span class="n">Remove</span><span class="p">,</span> <span class="n">Literal</span><span class="p">,</span> + <span class="n">Url</span><span class="p">,</span> <span class="n">MultipleInvalid</span><span class="p">,</span> <span class="n">LiteralInvalid</span><span class="p">,</span> <span class="n">TypeInvalid</span><span class="p">,</span> <span class="n">NotIn</span><span class="p">,</span> <span class="n">Match</span><span class="p">,</span> <span class="n">Email</span><span class="p">,</span> <span class="n">Replace</span><span class="p">,</span> <span class="n">Range</span><span class="p">,</span> <span class="n">Coerce</span><span class="p">,</span> <span class="n">All</span><span class="p">,</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Length</span><span class="p">,</span> <span class="n">FqdnUrl</span><span class="p">,</span> <span class="n">ALLOW_EXTRA</span><span class="p">,</span> <span class="n">PREVENT_EXTRA</span><span class="p">,</span> - <span class="n">validate</span><span class="p">,</span> <span class="n">ExactSequence</span><span class="p">,</span> <span class="n">Equal</span><span class="p">,</span> <span class="n">Unordered</span><span class="p">,</span> <span class="n">Number</span><span class="p">,</span> <span class="n">Date</span><span class="p">,</span> <span class="n">Datetime</span> -<span class="p">)</span> + <span class="n">validate</span><span class="p">,</span> <span class="n">ExactSequence</span><span class="p">,</span> <span class="n">Equal</span><span class="p">,</span> <span class="n">Unordered</span><span class="p">,</span> <span class="n">Number</span><span class="p">,</span> <span class="n">Maybe</span><span class="p">,</span> <span class="n">Datetime</span><span class="p">,</span> <span class="n">Date</span><span class="p">,</span> + <span class="n">Contains</span><span class="p">,</span> <span class="n">Marker</span><span class="p">,</span> <span class="n">IsDir</span><span class="p">,</span> <span class="n">IsFile</span><span class="p">,</span> <span class="n">PathExists</span><span class="p">,</span> <span class="n">SomeOf</span><span class="p">,</span> <span class="n">TooManyValid</span><span class="p">,</span> <span class="n">Self</span><span class="p">,</span> + <span class="n">raises</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">voluptuous.humanize</span> <span class="kn">import</span> <span class="n">humanize_error</span> -<span class="kn">from</span> <span class="nn">voluptuous.util</span> <span class="kn">import</span> <span class="n">to_utf8_py2</span><span class="p">,</span> <span class="n">u</span> +<span class="kn">from</span> <span class="nn">voluptuous.util</span> <span class="kn">import</span> <span class="n">u</span> <div class="viewcode-block" id="test_exact_sequence"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_exact_sequence">[docs]</a><span class="k">def</span> <span class="nf">test_exact_sequence</span><span class="p">():</span> @@ -116,6 +120,17 @@ <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise NotInInvalid"</span></div> +<div class="viewcode-block" id="test_contains"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_contains">[docs]</a><span class="k">def</span> <span class="nf">test_contains</span><span class="p">():</span> + <span class="sd">"""Verify contains validation method."""</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s1">'color'</span><span class="p">:</span> <span class="n">Contains</span><span class="p">(</span><span class="s1">'red'</span><span class="p">)})</span> + <span class="n">schema</span><span class="p">({</span><span class="s1">'color'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'blue'</span><span class="p">,</span> <span class="s1">'red'</span><span class="p">,</span> <span class="s1">'yellow'</span><span class="p">]})</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">schema</span><span class="p">({</span><span class="s1">'color'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'blue'</span><span class="p">,</span> <span class="s1">'yellow'</span><span class="p">]})</span> + <span class="k">except</span> <span class="n">Invalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> + <span class="s2">"value is not allowed for dictionary value @ data['color']"</span><span class="p">)</span></div> + + <div class="viewcode-block" id="test_remove"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_remove">[docs]</a><span class="k">def</span> <span class="nf">test_remove</span><span class="p">():</span> <span class="sd">"""Verify that Remove works."""</span> <span class="c1"># remove dict keys</span> @@ -184,6 +199,39 @@ <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise Invalid"</span></div> +<div class="viewcode-block" id="test_class"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_class">[docs]</a><span class="k">def</span> <span class="nf">test_class</span><span class="p">():</span> + <span class="k">class</span> <span class="nc">C1</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="k">pass</span> + + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="n">C1</span><span class="p">)</span> + <span class="n">schema</span><span class="p">(</span><span class="n">C1</span><span class="p">())</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">schema</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="s2">"expected C1"</span><span class="p">)</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errors</span><span class="p">),</span> <span class="mi">1</span><span class="p">)</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">TypeInvalid</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise Invalid"</span> + + <span class="c1"># In Python 2, this will be an old-style class (classobj instance)</span> + <span class="k">class</span> <span class="nc">C2</span><span class="p">:</span> + <span class="k">pass</span> + + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="n">C2</span><span class="p">)</span> + <span class="n">schema</span><span class="p">(</span><span class="n">C2</span><span class="p">())</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">schema</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="s2">"expected C2"</span><span class="p">)</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errors</span><span class="p">),</span> <span class="mi">1</span><span class="p">)</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">TypeInvalid</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise Invalid"</span></div> + + <div class="viewcode-block" id="test_email_validation"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_email_validation">[docs]</a><span class="k">def</span> <span class="nf">test_email_validation</span><span class="p">():</span> <span class="sd">""" test with valid email """</span> <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"email"</span><span class="p">:</span> <span class="n">Email</span><span class="p">()})</span> @@ -406,6 +454,69 @@ <span class="n">assert_equal</span><span class="p">(</span><span class="n">extended</span><span class="o">.</span><span class="n">schema</span><span class="p">,</span> <span class="p">{</span><span class="s1">'a'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'b'</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="s1">'c'</span><span class="p">:</span> <span class="nb">float</span><span class="p">,</span> <span class="s1">'e'</span><span class="p">:</span> <span class="nb">int</span><span class="p">},</span> <span class="s1">'d'</span><span class="p">:</span> <span class="nb">str</span><span class="p">})</span></div> +<div class="viewcode-block" id="test_equality"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_equality">[docs]</a><span class="k">def</span> <span class="nf">test_equality</span><span class="p">():</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="n">Schema</span><span class="p">(</span><span class="s1">'foo'</span><span class="p">),</span> <span class="n">Schema</span><span class="p">(</span><span class="s1">'foo'</span><span class="p">))</span> + + <span class="n">assert_equal</span><span class="p">(</span><span class="n">Schema</span><span class="p">([</span><span class="s1">'foo'</span><span class="p">,</span> <span class="s1">'bar'</span><span class="p">,</span> <span class="s1">'baz'</span><span class="p">]),</span> + <span class="n">Schema</span><span class="p">([</span><span class="s1">'foo'</span><span class="p">,</span> <span class="s1">'bar'</span><span class="p">,</span> <span class="s1">'baz'</span><span class="p">]))</span> + + <span class="c1"># Ensure two Schemas w/ two equivalent dicts initialized in a different</span> + <span class="c1"># order are considered equal.</span> + <span class="n">dict_a</span> <span class="o">=</span> <span class="p">{}</span> + <span class="n">dict_a</span><span class="p">[</span><span class="s1">'foo'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span> + <span class="n">dict_a</span><span class="p">[</span><span class="s1">'bar'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">2</span> + <span class="n">dict_a</span><span class="p">[</span><span class="s1">'baz'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">3</span> + + <span class="n">dict_b</span> <span class="o">=</span> <span class="p">{}</span> + <span class="n">dict_b</span><span class="p">[</span><span class="s1">'baz'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">3</span> + <span class="n">dict_b</span><span class="p">[</span><span class="s1">'bar'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">2</span> + <span class="n">dict_b</span><span class="p">[</span><span class="s1">'foo'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span> + + <span class="n">assert_equal</span><span class="p">(</span><span class="n">Schema</span><span class="p">(</span><span class="n">dict_a</span><span class="p">),</span> <span class="n">Schema</span><span class="p">(</span><span class="n">dict_b</span><span class="p">))</span></div> + + +<div class="viewcode-block" id="test_equality_negative"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_equality_negative">[docs]</a><span class="k">def</span> <span class="nf">test_equality_negative</span><span class="p">():</span> + <span class="sd">"""Verify that Schema objects are not equal to string representations"""</span> + <span class="n">assert_false</span><span class="p">(</span><span class="n">Schema</span><span class="p">(</span><span class="s1">'foo'</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'foo'</span><span class="p">)</span> + + <span class="n">assert_false</span><span class="p">(</span><span class="n">Schema</span><span class="p">([</span><span class="s1">'foo'</span><span class="p">,</span> <span class="s1">'bar'</span><span class="p">])</span> <span class="o">==</span> <span class="s2">"['foo', 'bar']"</span><span class="p">)</span> + <span class="n">assert_false</span><span class="p">(</span><span class="n">Schema</span><span class="p">([</span><span class="s1">'foo'</span><span class="p">,</span> <span class="s1">'bar'</span><span class="p">])</span> <span class="o">==</span> <span class="n">Schema</span><span class="p">(</span><span class="s2">"['foo', 'bar']"</span><span class="p">))</span> + + <span class="n">assert_false</span><span class="p">(</span><span class="n">Schema</span><span class="p">({</span><span class="s1">'foo'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'bar'</span><span class="p">:</span> <span class="mi">2</span><span class="p">})</span> <span class="o">==</span> <span class="s2">"{'foo': 1, 'bar': 2}"</span><span class="p">)</span> + <span class="n">assert_false</span><span class="p">(</span><span class="n">Schema</span><span class="p">({</span><span class="s1">'foo'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'bar'</span><span class="p">:</span> <span class="mi">2</span><span class="p">})</span> <span class="o">==</span> <span class="n">Schema</span><span class="p">(</span><span class="s2">"{'foo': 1, 'bar': 2}"</span><span class="p">))</span></div> + + +<div class="viewcode-block" id="test_inequality"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_inequality">[docs]</a><span class="k">def</span> <span class="nf">test_inequality</span><span class="p">():</span> + <span class="n">assert_true</span><span class="p">(</span><span class="n">Schema</span><span class="p">(</span><span class="s1">'foo'</span><span class="p">)</span> <span class="o">!=</span> <span class="s1">'foo'</span><span class="p">)</span> + + <span class="n">assert_true</span><span class="p">(</span><span class="n">Schema</span><span class="p">([</span><span class="s1">'foo'</span><span class="p">,</span> <span class="s1">'bar'</span><span class="p">])</span> <span class="o">!=</span> <span class="s2">"['foo', 'bar']"</span><span class="p">)</span> + <span class="n">assert_true</span><span class="p">(</span><span class="n">Schema</span><span class="p">([</span><span class="s1">'foo'</span><span class="p">,</span> <span class="s1">'bar'</span><span class="p">])</span> <span class="o">!=</span> <span class="n">Schema</span><span class="p">(</span><span class="s2">"['foo', 'bar']"</span><span class="p">))</span> + + <span class="n">assert_true</span><span class="p">(</span><span class="n">Schema</span><span class="p">({</span><span class="s1">'foo'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'bar'</span><span class="p">:</span> <span class="mi">2</span><span class="p">})</span> <span class="o">!=</span> <span class="s2">"{'foo': 1, 'bar': 2}"</span><span class="p">)</span> + <span class="n">assert_true</span><span class="p">(</span><span class="n">Schema</span><span class="p">({</span><span class="s1">'foo'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'bar'</span><span class="p">:</span> <span class="mi">2</span><span class="p">})</span> <span class="o">!=</span> <span class="n">Schema</span><span class="p">(</span><span class="s2">"{'foo': 1, 'bar': 2}"</span><span class="p">))</span></div> + + +<div class="viewcode-block" id="test_inequality_negative"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_inequality_negative">[docs]</a><span class="k">def</span> <span class="nf">test_inequality_negative</span><span class="p">():</span> + <span class="n">assert_false</span><span class="p">(</span><span class="n">Schema</span><span class="p">(</span><span class="s1">'foo'</span><span class="p">)</span> <span class="o">!=</span> <span class="n">Schema</span><span class="p">(</span><span class="s1">'foo'</span><span class="p">))</span> + + <span class="n">assert_false</span><span class="p">(</span><span class="n">Schema</span><span class="p">([</span><span class="s1">'foo'</span><span class="p">,</span> <span class="s1">'bar'</span><span class="p">,</span> <span class="s1">'baz'</span><span class="p">])</span> <span class="o">!=</span> + <span class="n">Schema</span><span class="p">([</span><span class="s1">'foo'</span><span class="p">,</span> <span class="s1">'bar'</span><span class="p">,</span> <span class="s1">'baz'</span><span class="p">]))</span> + + <span class="c1"># Ensure two Schemas w/ two equivalent dicts initialized in a different</span> + <span class="c1"># order are considered equal.</span> + <span class="n">dict_a</span> <span class="o">=</span> <span class="p">{}</span> + <span class="n">dict_a</span><span class="p">[</span><span class="s1">'foo'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span> + <span class="n">dict_a</span><span class="p">[</span><span class="s1">'bar'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">2</span> + <span class="n">dict_a</span><span class="p">[</span><span class="s1">'baz'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">3</span> + + <span class="n">dict_b</span> <span class="o">=</span> <span class="p">{}</span> + <span class="n">dict_b</span><span class="p">[</span><span class="s1">'baz'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">3</span> + <span class="n">dict_b</span><span class="p">[</span><span class="s1">'bar'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">2</span> + <span class="n">dict_b</span><span class="p">[</span><span class="s1">'foo'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span> + + <span class="n">assert_false</span><span class="p">(</span><span class="n">Schema</span><span class="p">(</span><span class="n">dict_a</span><span class="p">)</span> <span class="o">!=</span> <span class="n">Schema</span><span class="p">(</span><span class="n">dict_b</span><span class="p">))</span></div> + + <div class="viewcode-block" id="test_repr"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_repr">[docs]</a><span class="k">def</span> <span class="nf">test_repr</span><span class="p">():</span> <span class="sd">"""Verify that __repr__ returns valid Python expressions"""</span> <span class="n">match</span> <span class="o">=</span> <span class="n">Match</span><span class="p">(</span><span class="s1">'a pattern'</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="s1">'message'</span><span class="p">)</span> @@ -414,6 +525,7 @@ <span class="n">max_included</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="s1">'number not in range'</span><span class="p">)</span> <span class="n">coerce_</span> <span class="o">=</span> <span class="n">Coerce</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="s2">"moo"</span><span class="p">)</span> <span class="n">all_</span> <span class="o">=</span> <span class="n">All</span><span class="p">(</span><span class="s1">'10'</span><span class="p">,</span> <span class="n">Coerce</span><span class="p">(</span><span class="nb">int</span><span class="p">),</span> <span class="n">msg</span><span class="o">=</span><span class="s1">'all msg'</span><span class="p">)</span> + <span class="n">maybe_int</span> <span class="o">=</span> <span class="n">Maybe</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span> <span class="n">assert_equal</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">match</span><span class="p">),</span> <span class="s2">"Match('a pattern', msg='message')"</span><span class="p">)</span> <span class="n">assert_equal</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">replace</span><span class="p">),</span> <span class="s2">"Replace('you', 'I', msg='you and I')"</span><span class="p">)</span> @@ -422,7 +534,8 @@ <span class="s2">"Range(min=0, max=42, min_included=False, max_included=False, msg='number not in range')"</span> <span class="p">)</span> <span class="n">assert_equal</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">coerce_</span><span class="p">),</span> <span class="s2">"Coerce(int, msg='moo')"</span><span class="p">)</span> - <span class="n">assert_equal</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">all_</span><span class="p">),</span> <span class="s2">"All('10', Coerce(int, msg=None), msg='all msg')"</span><span class="p">)</span></div> + <span class="n">assert_equal</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">all_</span><span class="p">),</span> <span class="s2">"All('10', Coerce(int, msg=None), msg='all msg')"</span><span class="p">)</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">maybe_int</span><span class="p">),</span> <span class="s2">"Any(None, </span><span class="si">%s</span><span class="s2">, msg=None)"</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="nb">int</span><span class="p">))</span></div> <div class="viewcode-block" id="test_list_validation_messages"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_list_validation_messages">[docs]</a><span class="k">def</span> <span class="nf">test_list_validation_messages</span><span class="p">():</span> @@ -542,46 +655,24 @@ <span class="n">s</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span></div> +<div class="viewcode-block" id="test_maybe"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_maybe">[docs]</a><span class="k">def</span> <span class="nf">test_maybe</span><span class="p">():</span> + <span class="n">s</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="n">Maybe</span><span class="p">(</span><span class="nb">int</span><span class="p">))</span> + <span class="k">assert</span> <span class="n">s</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="k">assert</span> <span class="n">s</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span> <span class="ow">is</span> <span class="bp">None</span> + <span class="n">assert_raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="s1">'foo'</span><span class="p">)</span> + + <span class="n">s</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="n">Maybe</span><span class="p">({</span><span class="nb">str</span><span class="p">:</span> <span class="n">Coerce</span><span class="p">(</span><span class="nb">int</span><span class="p">)}))</span> + <span class="k">assert</span> <span class="n">s</span><span class="p">({</span><span class="s1">'foo'</span><span class="p">:</span> <span class="s1">'100'</span><span class="p">})</span> <span class="o">==</span> <span class="p">{</span><span class="s1">'foo'</span><span class="p">:</span> <span class="mi">100</span><span class="p">}</span> + <span class="k">assert</span> <span class="n">s</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span> <span class="ow">is</span> <span class="bp">None</span> + <span class="n">assert_raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="p">{</span><span class="s1">'foo'</span><span class="p">:</span> <span class="s1">'bar'</span><span class="p">})</span></div> + + <div class="viewcode-block" id="test_empty_list_as_exact"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_empty_list_as_exact">[docs]</a><span class="k">def</span> <span class="nf">test_empty_list_as_exact</span><span class="p">():</span> <span class="n">s</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">([])</span> <span class="n">assert_raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="n">s</span><span class="p">([])</span></div> -<div class="viewcode-block" id="test_empty_dict_as_exact"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_empty_dict_as_exact">[docs]</a><span class="k">def</span> <span class="nf">test_empty_dict_as_exact</span><span class="p">():</span> - <span class="c1"># {} always evaluates as {}</span> - <span class="n">s</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({})</span> - <span class="n">assert_raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="p">{</span><span class="s1">'extra'</span><span class="p">:</span> <span class="mi">1</span><span class="p">})</span> - <span class="n">s</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({},</span> <span class="n">extra</span><span class="o">=</span><span class="n">ALLOW_EXTRA</span><span class="p">)</span> <span class="c1"># this should not be used</span> - <span class="n">assert_raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="p">{</span><span class="s1">'extra'</span><span class="p">:</span> <span class="mi">1</span><span class="p">})</span> - - <span class="c1"># {...} evaluates as Schema({...})</span> - <span class="n">s</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s1">'foo'</span><span class="p">:</span> <span class="nb">int</span><span class="p">})</span> - <span class="n">assert_raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="p">{</span><span class="s1">'foo'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'extra'</span><span class="p">:</span> <span class="mi">1</span><span class="p">})</span> - <span class="n">s</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s1">'foo'</span><span class="p">:</span> <span class="nb">int</span><span class="p">},</span> <span class="n">extra</span><span class="o">=</span><span class="n">ALLOW_EXTRA</span><span class="p">)</span> - <span class="n">s</span><span class="p">({</span><span class="s1">'foo'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'extra'</span><span class="p">:</span> <span class="mi">1</span><span class="p">})</span> - - <span class="c1"># dict matches {} or {...}</span> - <span class="n">s</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="nb">dict</span><span class="p">)</span> - <span class="n">s</span><span class="p">({</span><span class="s1">'extra'</span><span class="p">:</span> <span class="mi">1</span><span class="p">})</span> - <span class="n">s</span><span class="p">({})</span> - <span class="n">s</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">extra</span><span class="o">=</span><span class="n">PREVENT_EXTRA</span><span class="p">)</span> - <span class="n">s</span><span class="p">({</span><span class="s1">'extra'</span><span class="p">:</span> <span class="mi">1</span><span class="p">})</span> - <span class="n">s</span><span class="p">({})</span> - - <span class="c1"># nested {} evaluate as {}</span> - <span class="n">s</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span> - <span class="s1">'inner'</span><span class="p">:</span> <span class="p">{}</span> - <span class="p">},</span> <span class="n">extra</span><span class="o">=</span><span class="n">ALLOW_EXTRA</span><span class="p">)</span> - <span class="n">assert_raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="p">{</span><span class="s1">'inner'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'extra'</span><span class="p">:</span> <span class="mi">1</span><span class="p">}})</span> - <span class="n">s</span><span class="p">({})</span> - <span class="n">s</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span> - <span class="s1">'inner'</span><span class="p">:</span> <span class="n">Schema</span><span class="p">({},</span> <span class="n">extra</span><span class="o">=</span><span class="n">ALLOW_EXTRA</span><span class="p">)</span> - <span class="p">})</span> - <span class="n">assert_raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="p">{</span><span class="s1">'inner'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'extra'</span><span class="p">:</span> <span class="mi">1</span><span class="p">}})</span> - <span class="n">s</span><span class="p">({})</span></div> - - <div class="viewcode-block" id="test_schema_decorator_match_with_args"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_schema_decorator_match_with_args">[docs]</a><span class="k">def</span> <span class="nf">test_schema_decorator_match_with_args</span><span class="p">():</span> <span class="nd">@validate</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span> <span class="k">def</span> <span class="nf">fn</span><span class="p">(</span><span class="n">arg</span><span class="p">):</span> @@ -662,20 +753,50 @@ <span class="n">assert_raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="n">fn</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span></div> -<div class="viewcode-block" id="test_unicode_key_is_converted_to_utf8_when_in_marker"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_unicode_key_is_converted_to_utf8_when_in_marker">[docs]</a><span class="k">def</span> <span class="nf">test_unicode_key_is_converted_to_utf8_when_in_marker</span><span class="p">():</span> - <span class="sd">"""Verify that when using unicode key the 'u' prefix is not thrown in the exception"""</span> - <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="n">Required</span><span class="p">(</span><span class="n">u</span><span class="p">(</span><span class="s1">'q'</span><span class="p">)):</span> <span class="mi">1</span><span class="p">})</span> - <span class="c1"># Can't use nose's raises (because we need to access the raised</span> - <span class="c1"># exception, nor assert_raises which fails with Python 2.6.9.</span> - <span class="k">try</span><span class="p">:</span> - <span class="n">schema</span><span class="p">({})</span> - <span class="k">except</span> <span class="n">Invalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> - <span class="n">assert_equal</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="s2">"required key not provided @ data['q']"</span><span class="p">)</span></div> +<div class="viewcode-block" id="test_schema_decorator_partial_match_called_with_args"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_schema_decorator_partial_match_called_with_args">[docs]</a><span class="k">def</span> <span class="nf">test_schema_decorator_partial_match_called_with_args</span><span class="p">():</span> + <span class="nd">@validate</span><span class="p">(</span><span class="n">arg1</span><span class="o">=</span><span class="nb">int</span><span class="p">)</span> + <span class="k">def</span> <span class="nf">fn</span><span class="p">(</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">):</span> + <span class="k">return</span> <span class="n">arg1</span> + + <span class="n">fn</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="s2">"foo"</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="test_schema_decorator_partial_unmatch_called_with_args"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_schema_decorator_partial_unmatch_called_with_args">[docs]</a><span class="k">def</span> <span class="nf">test_schema_decorator_partial_unmatch_called_with_args</span><span class="p">():</span> + <span class="nd">@validate</span><span class="p">(</span><span class="n">arg1</span><span class="o">=</span><span class="nb">int</span><span class="p">)</span> + <span class="k">def</span> <span class="nf">fn</span><span class="p">(</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">):</span> + <span class="k">return</span> <span class="n">arg1</span> + + <span class="n">assert_raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="n">fn</span><span class="p">,</span> <span class="s2">"bar"</span><span class="p">,</span> <span class="s2">"foo"</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="test_schema_decorator_partial_match_called_with_kwargs"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_schema_decorator_partial_match_called_with_kwargs">[docs]</a><span class="k">def</span> <span class="nf">test_schema_decorator_partial_match_called_with_kwargs</span><span class="p">():</span> + <span class="nd">@validate</span><span class="p">(</span><span class="n">arg2</span><span class="o">=</span><span class="nb">int</span><span class="p">)</span> + <span class="k">def</span> <span class="nf">fn</span><span class="p">(</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">):</span> + <span class="k">return</span> <span class="n">arg1</span> + + <span class="n">fn</span><span class="p">(</span><span class="n">arg1</span><span class="o">=</span><span class="s2">"foo"</span><span class="p">,</span> <span class="n">arg2</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="test_schema_decorator_partial_unmatch_called_with_kwargs"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_schema_decorator_partial_unmatch_called_with_kwargs">[docs]</a><span class="k">def</span> <span class="nf">test_schema_decorator_partial_unmatch_called_with_kwargs</span><span class="p">():</span> + <span class="nd">@validate</span><span class="p">(</span><span class="n">arg2</span><span class="o">=</span><span class="nb">int</span><span class="p">)</span> + <span class="k">def</span> <span class="nf">fn</span><span class="p">(</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">):</span> + <span class="k">return</span> <span class="n">arg1</span> + + <span class="n">assert_raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="n">fn</span><span class="p">,</span> <span class="n">arg1</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">arg2</span><span class="o">=</span><span class="s2">"foo"</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="test_unicode_as_key"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_unicode_as_key">[docs]</a><span class="k">def</span> <span class="nf">test_unicode_as_key</span><span class="p">():</span> + <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span> <span class="o">>=</span> <span class="p">(</span><span class="mi">3</span><span class="p">,):</span> + <span class="n">text_type</span> <span class="o">=</span> <span class="nb">str</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">text_type</span> <span class="o">=</span> <span class="nb">unicode</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="n">text_type</span><span class="p">:</span> <span class="nb">int</span><span class="p">})</span> + <span class="n">schema</span><span class="p">({</span><span class="n">u</span><span class="p">(</span><span class="s2">"foobar"</span><span class="p">):</span> <span class="mi">1</span><span class="p">})</span></div> <div class="viewcode-block" id="test_number_validation_with_string"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_number_validation_with_string">[docs]</a><span class="k">def</span> <span class="nf">test_number_validation_with_string</span><span class="p">():</span> <span class="sd">""" test with Number with string"""</span> - <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span> <span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">precision</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">scale</span><span class="o">=</span><span class="mi">2</span><span class="p">)})</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">precision</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">scale</span><span class="o">=</span><span class="mi">2</span><span class="p">)})</span> <span class="k">try</span><span class="p">:</span> <span class="n">schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="s1">'teststr'</span><span class="p">})</span> <span class="k">except</span> <span class="n">MultipleInvalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> @@ -685,20 +806,9 @@ <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise Invalid for String"</span></div> -<div class="viewcode-block" id="test_unicode_key_is_converted_to_utf8_when_plain_text"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_unicode_key_is_converted_to_utf8_when_plain_text">[docs]</a><span class="k">def</span> <span class="nf">test_unicode_key_is_converted_to_utf8_when_plain_text</span><span class="p">():</span> - <span class="n">key</span> <span class="o">=</span> <span class="n">u</span><span class="p">(</span><span class="s1">'q'</span><span class="p">)</span> - <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="n">key</span><span class="p">:</span> <span class="nb">int</span><span class="p">})</span> - <span class="c1"># Can't use nose's raises (because we need to access the raised</span> - <span class="c1"># exception, nor assert_raises which fails with Python 2.6.9.</span> - <span class="k">try</span><span class="p">:</span> - <span class="n">schema</span><span class="p">({</span><span class="n">key</span><span class="p">:</span> <span class="s1">'will fail'</span><span class="p">})</span> - <span class="k">except</span> <span class="n">Invalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> - <span class="n">assert_equal</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="s2">"expected int for dictionary value @ data['q']"</span><span class="p">)</span></div> - - <div class="viewcode-block" id="test_number_validation_with_invalid_precision_invalid_scale"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_number_validation_with_invalid_precision_invalid_scale">[docs]</a><span class="k">def</span> <span class="nf">test_number_validation_with_invalid_precision_invalid_scale</span><span class="p">():</span> <span class="sd">""" test with Number with invalid precision and scale"""</span> - <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span> <span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">precision</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">scale</span><span class="o">=</span><span class="mi">2</span><span class="p">)})</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">precision</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">scale</span><span class="o">=</span><span class="mi">2</span><span class="p">)})</span> <span class="k">try</span><span class="p">:</span> <span class="n">schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="s1">'123456.712'</span><span class="p">})</span> <span class="k">except</span> <span class="n">MultipleInvalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> @@ -710,40 +820,35 @@ <div class="viewcode-block" id="test_number_validation_with_valid_precision_scale_yield_decimal_true"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_number_validation_with_valid_precision_scale_yield_decimal_true">[docs]</a><span class="k">def</span> <span class="nf">test_number_validation_with_valid_precision_scale_yield_decimal_true</span><span class="p">():</span> <span class="sd">""" test with Number with valid precision and scale"""</span> - <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span> <span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">precision</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">scale</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">yield_decimal</span><span class="o">=</span><span class="bp">True</span><span class="p">)})</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">precision</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">scale</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">yield_decimal</span><span class="o">=</span><span class="bp">True</span><span class="p">)})</span> <span class="n">out_</span> <span class="o">=</span> <span class="n">schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="s1">'1234.00'</span><span class="p">})</span> <span class="n">assert_equal</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">out_</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"number"</span><span class="p">)),</span> <span class="mf">1234.00</span><span class="p">)</span></div> <div class="viewcode-block" id="test_number_when_precision_scale_none_yield_decimal_true"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_number_when_precision_scale_none_yield_decimal_true">[docs]</a><span class="k">def</span> <span class="nf">test_number_when_precision_scale_none_yield_decimal_true</span><span class="p">():</span> <span class="sd">""" test with Number with no precision and scale"""</span> - <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span> <span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">yield_decimal</span><span class="o">=</span><span class="bp">True</span><span class="p">)})</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">yield_decimal</span><span class="o">=</span><span class="bp">True</span><span class="p">)})</span> <span class="n">out_</span> <span class="o">=</span> <span class="n">schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="s1">'12345678901234'</span><span class="p">})</span> <span class="n">assert_equal</span><span class="p">(</span><span class="n">out_</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"number"</span><span class="p">),</span> <span class="mi">12345678901234</span><span class="p">)</span></div> <div class="viewcode-block" id="test_number_when_precision_none_n_valid_scale_case1_yield_decimal_true"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_number_when_precision_none_n_valid_scale_case1_yield_decimal_true">[docs]</a><span class="k">def</span> <span class="nf">test_number_when_precision_none_n_valid_scale_case1_yield_decimal_true</span><span class="p">():</span> <span class="sd">""" test with Number with no precision and valid scale case 1"""</span> - <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span> <span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">scale</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">yield_decimal</span><span class="o">=</span><span class="bp">True</span><span class="p">)})</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">scale</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">yield_decimal</span><span class="o">=</span><span class="bp">True</span><span class="p">)})</span> <span class="n">out_</span> <span class="o">=</span> <span class="n">schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="s1">'123456789.34'</span><span class="p">})</span> <span class="n">assert_equal</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">out_</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"number"</span><span class="p">)),</span> <span class="mf">123456789.34</span><span class="p">)</span></div> <div class="viewcode-block" id="test_number_when_precision_none_n_valid_scale_case2_yield_decimal_true"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_number_when_precision_none_n_valid_scale_case2_yield_decimal_true">[docs]</a><span class="k">def</span> <span class="nf">test_number_when_precision_none_n_valid_scale_case2_yield_decimal_true</span><span class="p">():</span> <span class="sd">""" test with Number with no precision and valid scale case 2 with zero in decimal part"""</span> - <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span> <span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">scale</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">yield_decimal</span><span class="o">=</span><span class="bp">True</span><span class="p">)})</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">scale</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">yield_decimal</span><span class="o">=</span><span class="bp">True</span><span class="p">)})</span> <span class="n">out_</span> <span class="o">=</span> <span class="n">schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="s1">'123456789012.00'</span><span class="p">})</span> <span class="n">assert_equal</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">out_</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"number"</span><span class="p">)),</span> <span class="mf">123456789012.00</span><span class="p">)</span></div> -<div class="viewcode-block" id="test_to_utf8"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_to_utf8">[docs]</a><span class="k">def</span> <span class="nf">test_to_utf8</span><span class="p">():</span> - <span class="n">s</span> <span class="o">=</span> <span class="n">u</span><span class="p">(</span><span class="s1">'hello'</span><span class="p">)</span> - <span class="n">assert_true</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">to_utf8_py2</span><span class="p">(</span><span class="n">s</span><span class="p">),</span> <span class="nb">str</span><span class="p">))</span></div> - - <div class="viewcode-block" id="test_number_when_precision_none_n_invalid_scale_yield_decimal_true"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_number_when_precision_none_n_invalid_scale_yield_decimal_true">[docs]</a><span class="k">def</span> <span class="nf">test_number_when_precision_none_n_invalid_scale_yield_decimal_true</span><span class="p">():</span> <span class="sd">""" test with Number with no precision and invalid scale"""</span> - <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span> <span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">scale</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">yield_decimal</span><span class="o">=</span><span class="bp">True</span><span class="p">)})</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">scale</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">yield_decimal</span><span class="o">=</span><span class="bp">True</span><span class="p">)})</span> <span class="k">try</span><span class="p">:</span> <span class="n">schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="s1">'12345678901.234'</span><span class="p">})</span> <span class="k">except</span> <span class="n">MultipleInvalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> @@ -755,14 +860,14 @@ <div class="viewcode-block" id="test_number_when_valid_precision_n_scale_none_yield_decimal_true"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_number_when_valid_precision_n_scale_none_yield_decimal_true">[docs]</a><span class="k">def</span> <span class="nf">test_number_when_valid_precision_n_scale_none_yield_decimal_true</span><span class="p">():</span> <span class="sd">""" test with Number with no precision and valid scale"""</span> - <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span> <span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">precision</span><span class="o">=</span><span class="mi">14</span><span class="p">,</span> <span class="n">yield_decimal</span><span class="o">=</span><span class="bp">True</span><span class="p">)})</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">precision</span><span class="o">=</span><span class="mi">14</span><span class="p">,</span> <span class="n">yield_decimal</span><span class="o">=</span><span class="bp">True</span><span class="p">)})</span> <span class="n">out_</span> <span class="o">=</span> <span class="n">schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="s1">'1234567.8901234'</span><span class="p">})</span> <span class="n">assert_equal</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">out_</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"number"</span><span class="p">)),</span> <span class="mf">1234567.8901234</span><span class="p">)</span></div> <div class="viewcode-block" id="test_number_when_invalid_precision_n_scale_none_yield_decimal_true"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_number_when_invalid_precision_n_scale_none_yield_decimal_true">[docs]</a><span class="k">def</span> <span class="nf">test_number_when_invalid_precision_n_scale_none_yield_decimal_true</span><span class="p">():</span> <span class="sd">""" test with Number with no precision and invalid scale"""</span> - <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span> <span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">precision</span><span class="o">=</span><span class="mi">14</span><span class="p">,</span> <span class="n">yield_decimal</span><span class="o">=</span><span class="bp">True</span><span class="p">)})</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">precision</span><span class="o">=</span><span class="mi">14</span><span class="p">,</span> <span class="n">yield_decimal</span><span class="o">=</span><span class="bp">True</span><span class="p">)})</span> <span class="k">try</span><span class="p">:</span> <span class="n">schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="s1">'12345674.8901234'</span><span class="p">})</span> <span class="k">except</span> <span class="n">MultipleInvalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> @@ -774,7 +879,7 @@ <div class="viewcode-block" id="test_number_validation_with_valid_precision_scale_yield_decimal_false"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_number_validation_with_valid_precision_scale_yield_decimal_false">[docs]</a><span class="k">def</span> <span class="nf">test_number_validation_with_valid_precision_scale_yield_decimal_false</span><span class="p">():</span> <span class="sd">""" test with Number with valid precision, scale and no yield_decimal"""</span> - <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span> <span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">precision</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">scale</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">yield_decimal</span><span class="o">=</span><span class="bp">False</span><span class="p">)})</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="n">Number</span><span class="p">(</span><span class="n">precision</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">scale</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">yield_decimal</span><span class="o">=</span><span class="bp">False</span><span class="p">)})</span> <span class="n">out_</span> <span class="o">=</span> <span class="n">schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="s1">'1234.00'</span><span class="p">})</span> <span class="n">assert_equal</span><span class="p">(</span><span class="n">out_</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"number"</span><span class="p">),</span> <span class="s1">'1234.00'</span><span class="p">)</span></div> @@ -799,8 +904,408 @@ <div class="viewcode-block" id="test_date"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_date">[docs]</a><span class="k">def</span> <span class="nf">test_date</span><span class="p">():</span> <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"date"</span><span class="p">:</span> <span class="n">Date</span><span class="p">()})</span> <span class="n">schema</span><span class="p">({</span><span class="s2">"date"</span><span class="p">:</span> <span class="s2">"2016-10-24"</span><span class="p">})</span> - <span class="n">assert_raises</span><span class="p">(</span><span class="n">MultipleInvalid</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="p">{</span><span class="s2">"date"</span><span class="p">:</span> <span class="s2">"2016-10-2"</span><span class="p">})</span> <span class="n">assert_raises</span><span class="p">(</span><span class="n">MultipleInvalid</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="p">{</span><span class="s2">"date"</span><span class="p">:</span> <span class="s2">"2016-10-24Z"</span><span class="p">})</span></div> + + +<div class="viewcode-block" id="test_date_custom_format"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_date_custom_format">[docs]</a><span class="k">def</span> <span class="nf">test_date_custom_format</span><span class="p">():</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"date"</span><span class="p">:</span> <span class="n">Date</span><span class="p">(</span><span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">"</span><span class="p">)})</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"date"</span><span class="p">:</span> <span class="s2">"20161024"</span><span class="p">})</span> + <span class="n">assert_raises</span><span class="p">(</span><span class="n">MultipleInvalid</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="p">{</span><span class="s2">"date"</span><span class="p">:</span> <span class="s2">"2016-10-24"</span><span class="p">})</span></div> + + +<div class="viewcode-block" id="test_ordered_dict"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_ordered_dict">[docs]</a><span class="k">def</span> <span class="nf">test_ordered_dict</span><span class="p">():</span> + <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">collections</span><span class="p">,</span> <span class="s1">'OrderedDict'</span><span class="p">):</span> + <span class="c1"># collections.OrderedDict was added in Python2.7; only run if present</span> + <span class="k">return</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="n">Number</span><span class="p">():</span> <span class="n">Number</span><span class="p">()})</span> <span class="c1"># x, y pairs (for interpolation or something)</span> + <span class="n">data</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">OrderedDict</span><span class="p">([(</span><span class="mf">5.0</span><span class="p">,</span> <span class="mf">3.7</span><span class="p">),</span> <span class="p">(</span><span class="mf">24.0</span><span class="p">,</span> <span class="mf">8.7</span><span class="p">),</span> <span class="p">(</span><span class="mf">43.0</span><span class="p">,</span> <span class="mf">1.5</span><span class="p">),</span> + <span class="p">(</span><span class="mf">62.0</span><span class="p">,</span> <span class="mf">2.1</span><span class="p">),</span> <span class="p">(</span><span class="mf">71.5</span><span class="p">,</span> <span class="mf">6.7</span><span class="p">),</span> <span class="p">(</span><span class="mf">90.5</span><span class="p">,</span> <span class="mf">4.1</span><span class="p">),</span> + <span class="p">(</span><span class="mf">109.0</span><span class="p">,</span> <span class="mf">3.9</span><span class="p">)])</span> + <span class="n">out</span> <span class="o">=</span> <span class="n">schema</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> + <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">collections</span><span class="o">.</span><span class="n">OrderedDict</span><span class="p">),</span> <span class="s1">'Collection is no longer ordered'</span> + <span class="k">assert</span> <span class="n">data</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="o">==</span> <span class="n">out</span><span class="o">.</span><span class="n">keys</span><span class="p">(),</span> <span class="s1">'Order is not consistent'</span></div> + + +<div class="viewcode-block" id="test_marker_hashable"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_marker_hashable">[docs]</a><span class="k">def</span> <span class="nf">test_marker_hashable</span><span class="p">():</span> + <span class="sd">"""Verify that you can get schema keys, even if markers were used"""</span> + <span class="n">definition</span> <span class="o">=</span> <span class="p">{</span> + <span class="n">Required</span><span class="p">(</span><span class="s1">'x'</span><span class="p">):</span> <span class="nb">int</span><span class="p">,</span> <span class="n">Optional</span><span class="p">(</span><span class="s1">'y'</span><span class="p">):</span> <span class="nb">float</span><span class="p">,</span> + <span class="n">Remove</span><span class="p">(</span><span class="s1">'j'</span><span class="p">):</span> <span class="nb">int</span><span class="p">,</span> <span class="n">Remove</span><span class="p">(</span><span class="nb">int</span><span class="p">):</span> <span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">:</span> <span class="nb">int</span> + <span class="p">}</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="n">definition</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'x'</span><span class="p">),</span> <span class="nb">int</span><span class="p">)</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="n">definition</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'y'</span><span class="p">),</span> <span class="nb">float</span><span class="p">)</span> + <span class="n">assert_true</span><span class="p">(</span><span class="n">Required</span><span class="p">(</span><span class="s1">'x'</span><span class="p">)</span> <span class="o">==</span> <span class="n">Required</span><span class="p">(</span><span class="s1">'x'</span><span class="p">))</span> + <span class="n">assert_true</span><span class="p">(</span><span class="n">Required</span><span class="p">(</span><span class="s1">'x'</span><span class="p">)</span> <span class="o">!=</span> <span class="n">Required</span><span class="p">(</span><span class="s1">'y'</span><span class="p">))</span> + <span class="c1"># Remove markers are not hashable</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="n">definition</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'j'</span><span class="p">),</span> <span class="bp">None</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="test_schema_infer"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_schema_infer">[docs]</a><span class="k">def</span> <span class="nf">test_schema_infer</span><span class="p">():</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="o">.</span><span class="n">infer</span><span class="p">({</span> + <span class="s1">'str'</span><span class="p">:</span> <span class="s1">'foo'</span><span class="p">,</span> + <span class="s1">'bool'</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> + <span class="s1">'int'</span><span class="p">:</span> <span class="mi">42</span><span class="p">,</span> + <span class="s1">'float'</span><span class="p">:</span> <span class="mf">3.14</span> + <span class="p">})</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">Schema</span><span class="p">({</span> + <span class="n">Required</span><span class="p">(</span><span class="s1">'str'</span><span class="p">):</span> <span class="nb">str</span><span class="p">,</span> + <span class="n">Required</span><span class="p">(</span><span class="s1">'bool'</span><span class="p">):</span> <span class="nb">bool</span><span class="p">,</span> + <span class="n">Required</span><span class="p">(</span><span class="s1">'int'</span><span class="p">):</span> <span class="nb">int</span><span class="p">,</span> + <span class="n">Required</span><span class="p">(</span><span class="s1">'float'</span><span class="p">):</span> <span class="nb">float</span> + <span class="p">}))</span></div> + + +<div class="viewcode-block" id="test_schema_infer_dict"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_schema_infer_dict">[docs]</a><span class="k">def</span> <span class="nf">test_schema_infer_dict</span><span class="p">():</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="o">.</span><span class="n">infer</span><span class="p">({</span> + <span class="s1">'a'</span><span class="p">:</span> <span class="p">{</span> + <span class="s1">'b'</span><span class="p">:</span> <span class="p">{</span> + <span class="s1">'c'</span><span class="p">:</span> <span class="s1">'foo'</span> + <span class="p">}</span> + <span class="p">}</span> + <span class="p">})</span> + + <span class="n">assert_equal</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">Schema</span><span class="p">({</span> + <span class="n">Required</span><span class="p">(</span><span class="s1">'a'</span><span class="p">):</span> <span class="p">{</span> + <span class="n">Required</span><span class="p">(</span><span class="s1">'b'</span><span class="p">):</span> <span class="p">{</span> + <span class="n">Required</span><span class="p">(</span><span class="s1">'c'</span><span class="p">):</span> <span class="nb">str</span> + <span class="p">}</span> + <span class="p">}</span> + <span class="p">}))</span></div> + + +<div class="viewcode-block" id="test_schema_infer_list"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_schema_infer_list">[docs]</a><span class="k">def</span> <span class="nf">test_schema_infer_list</span><span class="p">():</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="o">.</span><span class="n">infer</span><span class="p">({</span> + <span class="s1">'list'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'foo'</span><span class="p">,</span> <span class="bp">True</span><span class="p">,</span> <span class="mi">42</span><span class="p">,</span> <span class="mf">3.14</span><span class="p">]</span> + <span class="p">})</span> + + <span class="n">assert_equal</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">Schema</span><span class="p">({</span> + <span class="n">Required</span><span class="p">(</span><span class="s1">'list'</span><span class="p">):</span> <span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">]</span> + <span class="p">}))</span></div> + + +<div class="viewcode-block" id="test_schema_infer_scalar"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_schema_infer_scalar">[docs]</a><span class="k">def</span> <span class="nf">test_schema_infer_scalar</span><span class="p">():</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="n">Schema</span><span class="o">.</span><span class="n">infer</span><span class="p">(</span><span class="s1">'foo'</span><span class="p">),</span> <span class="n">Schema</span><span class="p">(</span><span class="nb">str</span><span class="p">))</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="n">Schema</span><span class="o">.</span><span class="n">infer</span><span class="p">(</span><span class="bp">True</span><span class="p">),</span> <span class="n">Schema</span><span class="p">(</span><span class="nb">bool</span><span class="p">))</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="n">Schema</span><span class="o">.</span><span class="n">infer</span><span class="p">(</span><span class="mi">42</span><span class="p">),</span> <span class="n">Schema</span><span class="p">(</span><span class="nb">int</span><span class="p">))</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="n">Schema</span><span class="o">.</span><span class="n">infer</span><span class="p">(</span><span class="mf">3.14</span><span class="p">),</span> <span class="n">Schema</span><span class="p">(</span><span class="nb">float</span><span class="p">))</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="n">Schema</span><span class="o">.</span><span class="n">infer</span><span class="p">({}),</span> <span class="n">Schema</span><span class="p">(</span><span class="nb">dict</span><span class="p">))</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="n">Schema</span><span class="o">.</span><span class="n">infer</span><span class="p">([]),</span> <span class="n">Schema</span><span class="p">(</span><span class="nb">list</span><span class="p">))</span></div> + + +<div class="viewcode-block" id="test_schema_infer_accepts_kwargs"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_schema_infer_accepts_kwargs">[docs]</a><span class="k">def</span> <span class="nf">test_schema_infer_accepts_kwargs</span><span class="p">():</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="o">.</span><span class="n">infer</span><span class="p">({</span> + <span class="s1">'str'</span><span class="p">:</span> <span class="s1">'foo'</span><span class="p">,</span> + <span class="s1">'bool'</span><span class="p">:</span> <span class="bp">True</span> + <span class="p">},</span> <span class="n">required</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">extra</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> + + <span class="c1"># Subset of schema should be acceptable thanks to required=False.</span> + <span class="n">schema</span><span class="p">({</span><span class="s1">'bool'</span><span class="p">:</span> <span class="bp">False</span><span class="p">})</span> + + <span class="c1"># Keys that are in schema should still match required types.</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">schema</span><span class="p">({</span><span class="s1">'str'</span><span class="p">:</span> <span class="mi">42</span><span class="p">})</span> + <span class="k">except</span> <span class="n">Invalid</span><span class="p">:</span> + <span class="k">pass</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s1">'Did not raise Invalid for Number'</span> + + <span class="c1"># Extra fields should be acceptable thanks to extra=True.</span> + <span class="n">schema</span><span class="p">({</span><span class="s1">'str'</span><span class="p">:</span> <span class="s1">'bar'</span><span class="p">,</span> <span class="s1">'int'</span><span class="p">:</span> <span class="mi">42</span><span class="p">})</span></div> + + +<div class="viewcode-block" id="test_validation_performance"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_validation_performance">[docs]</a><span class="k">def</span> <span class="nf">test_validation_performance</span><span class="p">():</span> + <span class="sd">"""</span> +<span class="sd"> This test comes to make sure the validation complexity of dictionaries is done in a linear time.</span> +<span class="sd"> to achieve this a custom marker is used in the scheme that counts each time it is evaluated.</span> +<span class="sd"> By doing so we can determine if the validation is done in linear complexity.</span> +<span class="sd"> Prior to issue https://github.com/alecthomas/voluptuous/issues/259 this was exponential</span> +<span class="sd"> """</span> + <span class="n">num_of_keys</span> <span class="o">=</span> <span class="mi">1000</span> + + <span class="n">schema_dict</span> <span class="o">=</span> <span class="p">{}</span> + <span class="n">data</span> <span class="o">=</span> <span class="p">{}</span> + <span class="n">data_extra_keys</span> <span class="o">=</span> <span class="p">{}</span> + + <span class="n">counter</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> + + <span class="k">class</span> <span class="nc">CounterMarker</span><span class="p">(</span><span class="n">Marker</span><span class="p">):</span> + <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="n">counter</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span> + <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">CounterMarker</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__call__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + + <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">num_of_keys</span><span class="p">):</span> + <span class="n">schema_dict</span><span class="p">[</span><span class="n">CounterMarker</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">))]</span> <span class="o">=</span> <span class="nb">str</span> + <span class="n">data</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> + <span class="n">data_extra_keys</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span> <span class="o">*</span> <span class="mi">2</span><span class="p">)]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="c1"># half of the keys are present, and half aren't</span> + + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="n">schema_dict</span><span class="p">,</span> <span class="n">extra</span><span class="o">=</span><span class="n">ALLOW_EXTRA</span><span class="p">)</span> + + <span class="n">schema</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> + + <span class="k">assert</span> <span class="n">counter</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o"><=</span> <span class="n">num_of_keys</span><span class="p">,</span> <span class="s2">"Validation complexity is not linear! </span><span class="si">%s</span><span class="s2"> > </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">counter</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">num_of_keys</span><span class="p">)</span> + + <span class="n">counter</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># reset counter</span> + <span class="n">schema</span><span class="p">(</span><span class="n">data_extra_keys</span><span class="p">)</span> + + <span class="k">assert</span> <span class="n">counter</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o"><=</span> <span class="n">num_of_keys</span><span class="p">,</span> <span class="s2">"Validation complexity is not linear! </span><span class="si">%s</span><span class="s2"> > </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">counter</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">num_of_keys</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="test_IsDir"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_IsDir">[docs]</a><span class="k">def</span> <span class="nf">test_IsDir</span><span class="p">():</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="n">IsDir</span><span class="p">())</span> + <span class="n">assert_raises</span><span class="p">(</span><span class="n">MultipleInvalid</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> + <span class="n">schema</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">__file__</span><span class="p">)))</span></div> + + +<div class="viewcode-block" id="test_IsFile"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_IsFile">[docs]</a><span class="k">def</span> <span class="nf">test_IsFile</span><span class="p">():</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="n">IsFile</span><span class="p">())</span> + <span class="n">assert_raises</span><span class="p">(</span><span class="n">MultipleInvalid</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> + <span class="n">schema</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">__file__</span><span class="p">))</span></div> + + +<div class="viewcode-block" id="test_PathExists"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_PathExists">[docs]</a><span class="k">def</span> <span class="nf">test_PathExists</span><span class="p">():</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="n">PathExists</span><span class="p">())</span> + <span class="n">assert_raises</span><span class="p">(</span><span class="n">MultipleInvalid</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> + <span class="n">schema</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">__file__</span><span class="p">))</span></div> + + +<div class="viewcode-block" id="test_description"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_description">[docs]</a><span class="k">def</span> <span class="nf">test_description</span><span class="p">():</span> + <span class="n">marker</span> <span class="o">=</span> <span class="n">Marker</span><span class="p">(</span><span class="n">Schema</span><span class="p">(</span><span class="nb">str</span><span class="p">),</span> <span class="n">description</span><span class="o">=</span><span class="s1">'Hello'</span><span class="p">)</span> + <span class="k">assert</span> <span class="n">marker</span><span class="o">.</span><span class="n">description</span> <span class="o">==</span> <span class="s1">'Hello'</span> + + <span class="n">optional</span> <span class="o">=</span> <span class="n">Optional</span><span class="p">(</span><span class="s1">'key'</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="s1">'Hello'</span><span class="p">)</span> + <span class="k">assert</span> <span class="n">optional</span><span class="o">.</span><span class="n">description</span> <span class="o">==</span> <span class="s1">'Hello'</span> + + <span class="n">exclusive</span> <span class="o">=</span> <span class="n">Exclusive</span><span class="p">(</span><span class="s1">'alpha'</span><span class="p">,</span> <span class="s1">'angles'</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="s1">'Hello'</span><span class="p">)</span> + <span class="k">assert</span> <span class="n">exclusive</span><span class="o">.</span><span class="n">description</span> <span class="o">==</span> <span class="s1">'Hello'</span> + + <span class="n">required</span> <span class="o">=</span> <span class="n">Required</span><span class="p">(</span><span class="s1">'key'</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="s1">'Hello'</span><span class="p">)</span> + <span class="k">assert</span> <span class="n">required</span><span class="o">.</span><span class="n">description</span> <span class="o">==</span> <span class="s1">'Hello'</span></div> + + +<div class="viewcode-block" id="test_SomeOf_min_validation"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_SomeOf_min_validation">[docs]</a><span class="k">def</span> <span class="nf">test_SomeOf_min_validation</span><span class="p">():</span> + <span class="n">validator</span> <span class="o">=</span> <span class="n">All</span><span class="p">(</span><span class="n">Length</span><span class="p">(</span><span class="nb">min</span><span class="o">=</span><span class="mi">8</span><span class="p">),</span> <span class="n">SomeOf</span><span class="p">(</span> + <span class="n">min_valid</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> + <span class="n">validators</span><span class="o">=</span><span class="p">[</span><span class="n">Match</span><span class="p">(</span><span class="s1">r'.*[A-Z]'</span><span class="p">,</span> <span class="s1">'no uppercase letters'</span><span class="p">),</span> + <span class="n">Match</span><span class="p">(</span><span class="s1">r'.*[a-z]'</span><span class="p">,</span> <span class="s1">'no lowercase letters'</span><span class="p">),</span> + <span class="n">Match</span><span class="p">(</span><span class="s1">r'.*[0-9]'</span><span class="p">,</span> <span class="s1">'no numbers'</span><span class="p">),</span> + <span class="n">Match</span><span class="p">(</span><span class="s1">r'.*[$@$!%*#?&^:;/<,>|{}()\-</span><span class="se">\'</span><span class="s1">._+=]'</span><span class="p">,</span> <span class="s1">'no symbols'</span><span class="p">)]))</span> + + <span class="n">validator</span><span class="p">(</span><span class="s1">'ffe532A1!'</span><span class="p">)</span> + <span class="k">with</span> <span class="n">raises</span><span class="p">(</span><span class="n">MultipleInvalid</span><span class="p">,</span> <span class="s1">'length of value must be at least 8'</span><span class="p">):</span> + <span class="n">validator</span><span class="p">(</span><span class="s1">'a'</span><span class="p">)</span> + + <span class="k">with</span> <span class="n">raises</span><span class="p">(</span><span class="n">MultipleInvalid</span><span class="p">,</span> <span class="s1">'no uppercase letters, no lowercase letters'</span><span class="p">):</span> + <span class="n">validator</span><span class="p">(</span><span class="s1">'wqs2!#s111'</span><span class="p">)</span> + + <span class="k">with</span> <span class="n">raises</span><span class="p">(</span><span class="n">MultipleInvalid</span><span class="p">,</span> <span class="s1">'no lowercase letters, no symbols'</span><span class="p">):</span> + <span class="n">validator</span><span class="p">(</span><span class="s1">'3A34SDEF5'</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="test_SomeOf_max_validation"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_SomeOf_max_validation">[docs]</a><span class="k">def</span> <span class="nf">test_SomeOf_max_validation</span><span class="p">():</span> + <span class="n">validator</span> <span class="o">=</span> <span class="n">SomeOf</span><span class="p">(</span> + <span class="n">max_valid</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> + <span class="n">validators</span><span class="o">=</span><span class="p">[</span><span class="n">Match</span><span class="p">(</span><span class="s1">r'.*[A-Z]'</span><span class="p">,</span> <span class="s1">'no uppercase letters'</span><span class="p">),</span> + <span class="n">Match</span><span class="p">(</span><span class="s1">r'.*[a-z]'</span><span class="p">,</span> <span class="s1">'no lowercase letters'</span><span class="p">),</span> + <span class="n">Match</span><span class="p">(</span><span class="s1">r'.*[0-9]'</span><span class="p">,</span> <span class="s1">'no numbers'</span><span class="p">)],</span> + <span class="n">msg</span><span class="o">=</span><span class="s1">'max validation test failed'</span><span class="p">)</span> + + <span class="n">validator</span><span class="p">(</span><span class="s1">'Aa'</span><span class="p">)</span> + <span class="k">with</span> <span class="n">raises</span><span class="p">(</span><span class="n">TooManyValid</span><span class="p">,</span> <span class="s1">'max validation test failed'</span><span class="p">):</span> + <span class="n">validator</span><span class="p">(</span><span class="s1">'Aa1'</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="test_self_validation"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_self_validation">[docs]</a><span class="k">def</span> <span class="nf">test_self_validation</span><span class="p">():</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> + <span class="s2">"follow"</span><span class="p">:</span> <span class="n">Self</span><span class="p">})</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="s2">"abc"</span><span class="p">})</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span><span class="p">:</span> + <span class="k">pass</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise Invalid"</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"number"</span><span class="p">:</span> <span class="s1">'123456.712'</span><span class="p">}})</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span><span class="p">:</span> + <span class="k">pass</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise Invalid"</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"number"</span><span class="p">:</span> <span class="mi">123456</span><span class="p">}})</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"number"</span><span class="p">:</span> <span class="mi">123456</span><span class="p">}}})</span></div> + + +<div class="viewcode-block" id="test_any_error_has_path"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_any_error_has_path">[docs]</a><span class="k">def</span> <span class="nf">test_any_error_has_path</span><span class="p">():</span> + <span class="sd">"""https://github.com/alecthomas/voluptuous/issues/347"""</span> + <span class="n">s</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span> + <span class="n">Optional</span><span class="p">(</span><span class="s1">'q'</span><span class="p">):</span> <span class="nb">int</span><span class="p">,</span> + <span class="n">Required</span><span class="p">(</span><span class="s1">'q2'</span><span class="p">):</span> <span class="n">Any</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="s1">'toto'</span><span class="p">)</span> + <span class="p">})</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">s</span><span class="p">({</span><span class="s1">'q'</span><span class="p">:</span> <span class="s1">'str'</span><span class="p">,</span> <span class="s1">'q2'</span><span class="p">:</span> <span class="s1">'tata'</span><span class="p">})</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span> + <span class="k">assert</span> <span class="p">(</span> + <span class="p">(</span><span class="n">exc</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">path</span> <span class="o">==</span> <span class="p">[</span><span class="s1">'q'</span><span class="p">]</span> <span class="ow">and</span> <span class="n">exc</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">path</span> <span class="o">==</span> <span class="p">[</span><span class="s1">'q2'</span><span class="p">])</span> <span class="ow">or</span> + <span class="p">(</span><span class="n">exc</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">path</span> <span class="o">==</span> <span class="p">[</span><span class="s1">'q'</span><span class="p">]</span> <span class="ow">and</span> <span class="n">exc</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">path</span> <span class="o">==</span> <span class="p">[</span><span class="s1">'q2'</span><span class="p">])</span> + <span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise AnyInvalid"</span></div> + + +<div class="viewcode-block" id="test_all_error_has_path"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_all_error_has_path">[docs]</a><span class="k">def</span> <span class="nf">test_all_error_has_path</span><span class="p">():</span> + <span class="sd">"""https://github.com/alecthomas/voluptuous/issues/347"""</span> + <span class="n">s</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span> + <span class="n">Optional</span><span class="p">(</span><span class="s1">'q'</span><span class="p">):</span> <span class="nb">int</span><span class="p">,</span> + <span class="n">Required</span><span class="p">(</span><span class="s1">'q2'</span><span class="p">):</span> <span class="n">All</span><span class="p">([</span><span class="nb">str</span><span class="p">,</span> <span class="n">Length</span><span class="p">(</span><span class="nb">min</span><span class="o">=</span><span class="mi">10</span><span class="p">)],</span> <span class="n">msg</span><span class="o">=</span><span class="s1">'toto'</span><span class="p">),</span> + <span class="p">})</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">s</span><span class="p">({</span><span class="s1">'q'</span><span class="p">:</span> <span class="s1">'str'</span><span class="p">,</span> <span class="s1">'q2'</span><span class="p">:</span> <span class="mi">12</span><span class="p">})</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span> + <span class="k">assert</span> <span class="p">(</span> + <span class="p">(</span><span class="n">exc</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">path</span> <span class="o">==</span> <span class="p">[</span><span class="s1">'q'</span><span class="p">]</span> <span class="ow">and</span> <span class="n">exc</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">path</span> <span class="o">==</span> <span class="p">[</span><span class="s1">'q2'</span><span class="p">])</span> <span class="ow">or</span> + <span class="p">(</span><span class="n">exc</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">path</span> <span class="o">==</span> <span class="p">[</span><span class="s1">'q'</span><span class="p">]</span> <span class="ow">and</span> <span class="n">exc</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">path</span> <span class="o">==</span> <span class="p">[</span><span class="s1">'q2'</span><span class="p">])</span> + <span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise AllInvalid"</span></div> + + +<div class="viewcode-block" id="test_match_error_has_path"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_match_error_has_path">[docs]</a><span class="k">def</span> <span class="nf">test_match_error_has_path</span><span class="p">():</span> + <span class="sd">"""https://github.com/alecthomas/voluptuous/issues/347"""</span> + <span class="n">s</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span> + <span class="n">Required</span><span class="p">(</span><span class="s1">'q2'</span><span class="p">):</span> <span class="n">Match</span><span class="p">(</span><span class="s2">"a"</span><span class="p">),</span> + <span class="p">})</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">s</span><span class="p">({</span><span class="s1">'q2'</span><span class="p">:</span> <span class="mi">12</span><span class="p">})</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span> + <span class="k">assert</span> <span class="n">exc</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">path</span> <span class="o">==</span> <span class="p">[</span><span class="s1">'q2'</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise MatchInvalid"</span></div> + + +<div class="viewcode-block" id="test_self_any"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_self_any">[docs]</a><span class="k">def</span> <span class="nf">test_self_any</span><span class="p">():</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> + <span class="s2">"follow"</span><span class="p">:</span> <span class="n">Any</span><span class="p">(</span><span class="n">Self</span><span class="p">,</span> <span class="s2">"stop"</span><span class="p">)})</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="s2">"abc"</span><span class="p">})</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span><span class="p">:</span> + <span class="k">pass</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise Invalid"</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"number"</span><span class="p">:</span> <span class="s1">'123456.712'</span><span class="p">}})</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span><span class="p">:</span> + <span class="k">pass</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise Invalid"</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"number"</span><span class="p">:</span> <span class="mi">123456</span><span class="p">}})</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"number"</span><span class="p">:</span> <span class="mi">123456</span><span class="p">}}})</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"number"</span><span class="p">:</span> <span class="mi">123456</span><span class="p">,</span> <span class="s2">"follow"</span><span class="p">:</span> <span class="s2">"stop"</span><span class="p">}}})</span></div> + + +<div class="viewcode-block" id="test_self_all"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_self_all">[docs]</a><span class="k">def</span> <span class="nf">test_self_all</span><span class="p">():</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> + <span class="s2">"follow"</span><span class="p">:</span> <span class="n">All</span><span class="p">(</span><span class="n">Self</span><span class="p">,</span> + <span class="n">Schema</span><span class="p">({</span><span class="s2">"extra_number"</span><span class="p">:</span> <span class="nb">int</span><span class="p">},</span> + <span class="n">extra</span><span class="o">=</span><span class="n">ALLOW_EXTRA</span><span class="p">))},</span> + <span class="n">extra</span><span class="o">=</span><span class="n">ALLOW_EXTRA</span><span class="p">)</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"number"</span><span class="p">:</span> <span class="s2">"abc"</span><span class="p">})</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span><span class="p">:</span> + <span class="k">pass</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise Invalid"</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"number"</span><span class="p">:</span> <span class="s1">'123456.712'</span><span class="p">}})</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span><span class="p">:</span> + <span class="k">pass</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise Invalid"</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"number"</span><span class="p">:</span> <span class="mi">123456</span><span class="p">}})</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"number"</span><span class="p">:</span> <span class="mi">123456</span><span class="p">}}})</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"number"</span><span class="p">:</span> <span class="mi">123456</span><span class="p">,</span> <span class="s2">"extra_number"</span><span class="p">:</span> <span class="mi">123</span><span class="p">}})</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">schema</span><span class="p">({</span><span class="s2">"follow"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"number"</span><span class="p">:</span> <span class="mi">123456</span><span class="p">,</span> <span class="s2">"extra_number"</span><span class="p">:</span> <span class="s2">"123"</span><span class="p">}})</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span><span class="p">:</span> + <span class="k">pass</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise Invalid"</span></div> + + +<div class="viewcode-block" id="test_SomeOf_on_bounds_assertion"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_SomeOf_on_bounds_assertion">[docs]</a><span class="k">def</span> <span class="nf">test_SomeOf_on_bounds_assertion</span><span class="p">():</span> + <span class="k">with</span> <span class="n">raises</span><span class="p">(</span><span class="ne">AssertionError</span><span class="p">,</span> <span class="s1">'when using "SomeOf" you should specify at least one of min_valid and max_valid'</span><span class="p">):</span> + <span class="n">SomeOf</span><span class="p">(</span><span class="n">validators</span><span class="o">=</span><span class="p">[])</span></div> + + +<div class="viewcode-block" id="test_comparing_voluptuous_object_to_str"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_comparing_voluptuous_object_to_str">[docs]</a><span class="k">def</span> <span class="nf">test_comparing_voluptuous_object_to_str</span><span class="p">():</span> + <span class="n">assert_true</span><span class="p">(</span><span class="n">Optional</span><span class="p">(</span><span class="s1">'Classification'</span><span class="p">)</span> <span class="o"><</span> <span class="s1">'Name'</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="test_set_of_integers"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_set_of_integers">[docs]</a><span class="k">def</span> <span class="nf">test_set_of_integers</span><span class="p">():</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="nb">int</span><span class="p">})</span> + <span class="k">with</span> <span class="n">raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="s1">'expected a set'</span><span class="p">):</span> + <span class="n">schema</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span> + <span class="k">with</span> <span class="n">raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="s1">'expected a set'</span><span class="p">):</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">frozenset</span><span class="p">([</span><span class="mi">42</span><span class="p">]))</span> + + <span class="n">schema</span><span class="p">(</span><span class="nb">set</span><span class="p">())</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">set</span><span class="p">([</span><span class="mi">42</span><span class="p">]))</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">set</span><span class="p">([</span><span class="mi">42</span><span class="p">,</span> <span class="mi">43</span><span class="p">,</span> <span class="mi">44</span><span class="p">]))</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">set</span><span class="p">([</span><span class="s1">'abc'</span><span class="p">]))</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="s2">"invalid value in set"</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise Invalid"</span></div> + + +<div class="viewcode-block" id="test_frozenset_of_integers"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_frozenset_of_integers">[docs]</a><span class="k">def</span> <span class="nf">test_frozenset_of_integers</span><span class="p">():</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="nb">frozenset</span><span class="p">([</span><span class="nb">int</span><span class="p">]))</span> + <span class="k">with</span> <span class="n">raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="s1">'expected a frozenset'</span><span class="p">):</span> + <span class="n">schema</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span> + <span class="k">with</span> <span class="n">raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="s1">'expected a frozenset'</span><span class="p">):</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">set</span><span class="p">([</span><span class="mi">42</span><span class="p">]))</span> + + <span class="n">schema</span><span class="p">(</span><span class="nb">frozenset</span><span class="p">())</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">frozenset</span><span class="p">([</span><span class="mi">42</span><span class="p">]))</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">frozenset</span><span class="p">([</span><span class="mi">42</span><span class="p">,</span> <span class="mi">43</span><span class="p">,</span> <span class="mi">44</span><span class="p">]))</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">frozenset</span><span class="p">([</span><span class="s1">'abc'</span><span class="p">]))</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="s2">"invalid value in frozenset"</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise Invalid"</span></div> + + +<div class="viewcode-block" id="test_set_of_integers_and_strings"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_set_of_integers_and_strings">[docs]</a><span class="k">def</span> <span class="nf">test_set_of_integers_and_strings</span><span class="p">():</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="nb">int</span><span class="p">,</span> <span class="nb">str</span><span class="p">})</span> + <span class="k">with</span> <span class="n">raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="s1">'expected a set'</span><span class="p">):</span> + <span class="n">schema</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span> + + <span class="n">schema</span><span class="p">(</span><span class="nb">set</span><span class="p">())</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">set</span><span class="p">([</span><span class="mi">42</span><span class="p">]))</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">set</span><span class="p">([</span><span class="s1">'abc'</span><span class="p">]))</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">set</span><span class="p">([</span><span class="mi">42</span><span class="p">,</span> <span class="s1">'abc'</span><span class="p">]))</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">set</span><span class="p">([</span><span class="bp">None</span><span class="p">]))</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="s2">"invalid value in set"</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise Invalid"</span></div> + + +<div class="viewcode-block" id="test_frozenset_of_integers_and_strings"><a class="viewcode-back" href="../../../voluptuous.tests.html#voluptuous.tests.tests.test_frozenset_of_integers_and_strings">[docs]</a><span class="k">def</span> <span class="nf">test_frozenset_of_integers_and_strings</span><span class="p">():</span> + <span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="nb">frozenset</span><span class="p">([</span><span class="nb">int</span><span class="p">,</span> <span class="nb">str</span><span class="p">]))</span> + <span class="k">with</span> <span class="n">raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">,</span> <span class="s1">'expected a frozenset'</span><span class="p">):</span> + <span class="n">schema</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span> + + <span class="n">schema</span><span class="p">(</span><span class="nb">frozenset</span><span class="p">())</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">frozenset</span><span class="p">([</span><span class="mi">42</span><span class="p">]))</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">frozenset</span><span class="p">([</span><span class="s1">'abc'</span><span class="p">]))</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">frozenset</span><span class="p">([</span><span class="mi">42</span><span class="p">,</span> <span class="s1">'abc'</span><span class="p">]))</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">schema</span><span class="p">(</span><span class="nb">frozenset</span><span class="p">([</span><span class="bp">None</span><span class="p">]))</span> + <span class="k">except</span> <span class="n">MultipleInvalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="n">assert_equal</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="s2">"invalid value in frozenset"</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s2">"Did not raise Invalid"</span></div> </pre></div> </div> diff --git a/docs/_build/html/_modules/voluptuous/util.html b/docs/_build/html/_modules/voluptuous/util.html index a86c506..587d01e 100644 --- a/docs/_build/html/_modules/voluptuous/util.html +++ b/docs/_build/html/_modules/voluptuous/util.html @@ -43,14 +43,9 @@ <h1>Source code for voluptuous.util</h1><div class="highlight"><pre> <span></span><span class="kn">import</span> <span class="nn">sys</span> -<span class="k">try</span><span class="p">:</span> - <span class="kn">from</span> <span class="nn">error</span> <span class="kn">import</span> <span class="n">LiteralInvalid</span><span class="p">,</span> <span class="n">TypeInvalid</span><span class="p">,</span> <span class="n">Invalid</span> - <span class="kn">from</span> <span class="nn">schema_builder</span> <span class="kn">import</span> <span class="n">Schema</span><span class="p">,</span> <span class="n">default_factory</span><span class="p">,</span> <span class="n">raises</span> - <span class="kn">import</span> <span class="nn">validators</span> -<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> - <span class="kn">from</span> <span class="nn">.error</span> <span class="kn">import</span> <span class="n">LiteralInvalid</span><span class="p">,</span> <span class="n">TypeInvalid</span><span class="p">,</span> <span class="n">Invalid</span> - <span class="kn">from</span> <span class="nn">.schema_builder</span> <span class="kn">import</span> <span class="n">Schema</span><span class="p">,</span> <span class="n">default_factory</span><span class="p">,</span> <span class="n">raises</span> - <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">validators</span> +<span class="kn">from</span> <span class="nn">voluptuous.error</span> <span class="kn">import</span> <span class="n">LiteralInvalid</span><span class="p">,</span> <span class="n">TypeInvalid</span><span class="p">,</span> <span class="n">Invalid</span> +<span class="kn">from</span> <span class="nn">voluptuous.schema_builder</span> <span class="kn">import</span> <span class="n">Schema</span><span class="p">,</span> <span class="n">default_factory</span><span class="p">,</span> <span class="n">raises</span> +<span class="kn">from</span> <span class="nn">voluptuous</span> <span class="kn">import</span> <span class="n">validators</span> <span class="n">__author__</span> <span class="o">=</span> <span class="s1">'tusharmakkar08'</span> @@ -195,12 +190,6 @@ <span class="k">return</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lit</span><span class="p">)</span></div> -<div class="viewcode-block" id="to_utf8_py2"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.util.to_utf8_py2">[docs]</a><span class="k">def</span> <span class="nf">to_utf8_py2</span><span class="p">(</span><span class="n">data</span><span class="p">):</span> - <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span> <span class="o"><</span> <span class="p">(</span><span class="mi">3</span><span class="p">,)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="nb">unicode</span><span class="p">):</span> - <span class="k">return</span> <span class="n">data</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">)</span> - <span class="k">return</span> <span class="n">data</span></div> - - <div class="viewcode-block" id="u"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.util.u">[docs]</a><span class="k">def</span> <span class="nf">u</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span> <span class="o"><</span> <span class="p">(</span><span class="mi">3</span><span class="p">,):</span> <span class="k">return</span> <span class="nb">unicode</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> diff --git a/docs/_build/html/_modules/voluptuous/validators.html b/docs/_build/html/_modules/voluptuous/validators.html index 79fa4dd..dffa9e9 100644 --- a/docs/_build/html/_modules/voluptuous/validators.html +++ b/docs/_build/html/_modules/voluptuous/validators.html @@ -48,22 +48,16 @@ <span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">wraps</span> <span class="kn">from</span> <span class="nn">decimal</span> <span class="kn">import</span> <span class="n">Decimal</span><span class="p">,</span> <span class="n">InvalidOperation</span> -<span class="k">try</span><span class="p">:</span> - <span class="kn">from</span> <span class="nn">schema_builder</span> <span class="kn">import</span> <span class="n">Schema</span><span class="p">,</span> <span class="n">raises</span><span class="p">,</span> <span class="n">message</span> - <span class="kn">from</span> <span class="nn">error</span> <span class="kn">import</span> <span class="p">(</span><span class="n">MultipleInvalid</span><span class="p">,</span> <span class="n">CoerceInvalid</span><span class="p">,</span> <span class="n">TrueInvalid</span><span class="p">,</span> <span class="n">FalseInvalid</span><span class="p">,</span> <span class="n">BooleanInvalid</span><span class="p">,</span> <span class="n">Invalid</span><span class="p">,</span> <span class="n">AnyInvalid</span><span class="p">,</span> - <span class="n">AllInvalid</span><span class="p">,</span> <span class="n">MatchInvalid</span><span class="p">,</span> <span class="n">UrlInvalid</span><span class="p">,</span> <span class="n">EmailInvalid</span><span class="p">,</span> <span class="n">FileInvalid</span><span class="p">,</span> <span class="n">DirInvalid</span><span class="p">,</span> <span class="n">RangeInvalid</span><span class="p">,</span> - <span class="n">PathInvalid</span><span class="p">,</span> <span class="n">ExactSequenceInvalid</span><span class="p">,</span> <span class="n">LengthInvalid</span><span class="p">,</span> <span class="n">DatetimeInvalid</span><span class="p">,</span> <span class="n">DateInvalid</span><span class="p">,</span> <span class="n">InInvalid</span><span class="p">,</span> - <span class="n">TypeInvalid</span><span class="p">,</span> <span class="n">NotInInvalid</span><span class="p">)</span> -<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> - <span class="kn">from</span> <span class="nn">.schema_builder</span> <span class="kn">import</span> <span class="n">Schema</span><span class="p">,</span> <span class="n">raises</span><span class="p">,</span> <span class="n">message</span> - <span class="kn">from</span> <span class="nn">.error</span> <span class="kn">import</span> <span class="p">(</span><span class="n">MultipleInvalid</span><span class="p">,</span> <span class="n">CoerceInvalid</span><span class="p">,</span> <span class="n">TrueInvalid</span><span class="p">,</span> <span class="n">FalseInvalid</span><span class="p">,</span> <span class="n">BooleanInvalid</span><span class="p">,</span> <span class="n">Invalid</span><span class="p">,</span> <span class="n">AnyInvalid</span><span class="p">,</span> - <span class="n">AllInvalid</span><span class="p">,</span> <span class="n">MatchInvalid</span><span class="p">,</span> <span class="n">UrlInvalid</span><span class="p">,</span> <span class="n">EmailInvalid</span><span class="p">,</span> <span class="n">FileInvalid</span><span class="p">,</span> <span class="n">DirInvalid</span><span class="p">,</span> <span class="n">RangeInvalid</span><span class="p">,</span> - <span class="n">PathInvalid</span><span class="p">,</span> <span class="n">ExactSequenceInvalid</span><span class="p">,</span> <span class="n">LengthInvalid</span><span class="p">,</span> <span class="n">DatetimeInvalid</span><span class="p">,</span> <span class="n">DateInvalid</span><span class="p">,</span> <span class="n">InInvalid</span><span class="p">,</span> - <span class="n">TypeInvalid</span><span class="p">,</span> <span class="n">NotInInvalid</span><span class="p">)</span> - +<span class="kn">from</span> <span class="nn">voluptuous.schema_builder</span> <span class="kn">import</span> <span class="n">Schema</span><span class="p">,</span> <span class="n">raises</span><span class="p">,</span> <span class="n">message</span> +<span class="kn">from</span> <span class="nn">voluptuous.error</span> <span class="kn">import</span> <span class="p">(</span><span class="n">MultipleInvalid</span><span class="p">,</span> <span class="n">CoerceInvalid</span><span class="p">,</span> <span class="n">TrueInvalid</span><span class="p">,</span> <span class="n">FalseInvalid</span><span class="p">,</span> <span class="n">BooleanInvalid</span><span class="p">,</span> <span class="n">Invalid</span><span class="p">,</span> + <span class="n">AnyInvalid</span><span class="p">,</span> <span class="n">AllInvalid</span><span class="p">,</span> <span class="n">MatchInvalid</span><span class="p">,</span> <span class="n">UrlInvalid</span><span class="p">,</span> <span class="n">EmailInvalid</span><span class="p">,</span> <span class="n">FileInvalid</span><span class="p">,</span> <span class="n">DirInvalid</span><span class="p">,</span> + <span class="n">RangeInvalid</span><span class="p">,</span> <span class="n">PathInvalid</span><span class="p">,</span> <span class="n">ExactSequenceInvalid</span><span class="p">,</span> <span class="n">LengthInvalid</span><span class="p">,</span> <span class="n">DatetimeInvalid</span><span class="p">,</span> + <span class="n">DateInvalid</span><span class="p">,</span> <span class="n">InInvalid</span><span class="p">,</span> <span class="n">TypeInvalid</span><span class="p">,</span> <span class="n">NotInInvalid</span><span class="p">,</span> <span class="n">ContainsInvalid</span><span class="p">,</span> <span class="n">NotEnoughValid</span><span class="p">,</span> + <span class="n">TooManyValid</span><span class="p">)</span> <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span> <span class="o">>=</span> <span class="p">(</span><span class="mi">3</span><span class="p">,):</span> <span class="kn">import</span> <span class="nn">urllib.parse</span> <span class="kn">as</span> <span class="nn">urlparse</span> + <span class="nb">basestring</span> <span class="o">=</span> <span class="nb">str</span> <span class="k">else</span><span class="p">:</span> <span class="kn">import</span> <span class="nn">urlparse</span> @@ -142,7 +136,7 @@ <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">v</span><span class="p">):</span> <span class="k">try</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> - <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span> + <span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">,</span> <span class="n">InvalidOperation</span><span class="p">):</span> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="p">(</span><span class="s1">'expected </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">type_name</span><span class="p">)</span> <span class="k">raise</span> <span class="n">CoerceInvalid</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> @@ -230,7 +224,40 @@ <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">v</span><span class="p">)</span></div> -<div class="viewcode-block" id="Any"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.validators.Any">[docs]</a><span class="k">class</span> <span class="nc">Any</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> +<span class="k">class</span> <span class="nc">_WithSubValidators</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Base class for validators that use sub-validators.</span> + +<span class="sd"> Special class to use as a parent class for validators using sub-validators.</span> +<span class="sd"> This class provides the `__voluptuous_compile__` method so the</span> +<span class="sd"> sub-validators are compiled by the parent `Schema`.</span> +<span class="sd"> """</span> + + <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="o">*</span><span class="n">validators</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">validators</span> <span class="o">=</span> <span class="n">validators</span> + <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'msg'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">__voluptuous_compile__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_compiled</span> <span class="o">=</span> <span class="p">[</span> + <span class="n">schema</span><span class="o">.</span><span class="n">_compile</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> + <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span> + <span class="p">]</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_run</span> + + <span class="k">def</span> <span class="nf">_run</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exec</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_compiled</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">v</span><span class="p">):</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exec</span><span class="p">((</span><span class="n">Schema</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span><span class="p">),</span> <span class="n">v</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">return</span> <span class="s1">'</span><span class="si">%s</span><span class="s1">(</span><span class="si">%s</span><span class="s1">, msg=</span><span class="si">%r</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">,</span> + <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span><span class="p">),</span> + <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> + <span class="p">)</span> + + +<div class="viewcode-block" id="Any"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.validators.Any">[docs]</a><span class="k">class</span> <span class="nc">Any</span><span class="p">(</span><span class="n">_WithSubValidators</span><span class="p">):</span> <span class="sd">"""Use the first validated value.</span> <span class="sd"> :param msg: Message to deliver to user if validation fails.</span> @@ -255,33 +282,30 @@ <span class="sd"> ... validate(4)</span> <span class="sd"> """</span> - <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="o">*</span><span class="n">validators</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> - <span class="bp">self</span><span class="o">.</span><span class="n">validators</span> <span class="o">=</span> <span class="n">validators</span> - <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'msg'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> - <span class="bp">self</span><span class="o">.</span><span class="n">_schemas</span> <span class="o">=</span> <span class="p">[</span><span class="n">Schema</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">validators</span><span class="p">]</span> - - <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">v</span><span class="p">):</span> + <span class="k">def</span> <span class="nf">_exec</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">funcs</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="n">error</span> <span class="o">=</span> <span class="bp">None</span> - <span class="k">for</span> <span class="n">schema</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_schemas</span><span class="p">:</span> + <span class="k">for</span> <span class="n">func</span> <span class="ow">in</span> <span class="n">funcs</span><span class="p">:</span> <span class="k">try</span><span class="p">:</span> - <span class="k">return</span> <span class="n">schema</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> + <span class="k">if</span> <span class="n">path</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> + <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="k">except</span> <span class="n">Invalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="k">if</span> <span class="n">error</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">path</span><span class="p">)</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">path</span><span class="p">):</span> <span class="n">error</span> <span class="o">=</span> <span class="n">e</span> <span class="k">else</span><span class="p">:</span> <span class="k">if</span> <span class="n">error</span><span class="p">:</span> - <span class="k">raise</span> <span class="n">error</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">is</span> <span class="bp">None</span> <span class="k">else</span> <span class="n">AnyInvalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">)</span> - <span class="k">raise</span> <span class="n">AnyInvalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="s1">'no valid value found'</span><span class="p">)</span> - - <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> - <span class="k">return</span> <span class="s1">'Any([</span><span class="si">%s</span><span class="s1">])'</span> <span class="o">%</span> <span class="p">(</span><span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span><span class="p">))</span></div> + <span class="k">raise</span> <span class="n">error</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">is</span> <span class="bp">None</span> <span class="k">else</span> <span class="n">AnyInvalid</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">)</span> + <span class="k">raise</span> <span class="n">AnyInvalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="s1">'no valid value found'</span><span class="p">,</span> + <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">)</span></div> <span class="c1"># Convenience alias</span> <span class="n">Or</span> <span class="o">=</span> <span class="n">Any</span> -<div class="viewcode-block" id="All"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.validators.All">[docs]</a><span class="k">class</span> <span class="nc">All</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> +<div class="viewcode-block" id="All"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.validators.All">[docs]</a><span class="k">class</span> <span class="nc">All</span><span class="p">(</span><span class="n">_WithSubValidators</span><span class="p">):</span> <span class="sd">"""Value must pass all validators.</span> <span class="sd"> The output of each validator is passed as input to the next.</span> @@ -294,24 +318,16 @@ <span class="sd"> 10</span> <span class="sd"> """</span> - <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="o">*</span><span class="n">validators</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> - <span class="bp">self</span><span class="o">.</span><span class="n">validators</span> <span class="o">=</span> <span class="n">validators</span> - <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'msg'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> - <span class="bp">self</span><span class="o">.</span><span class="n">_schemas</span> <span class="o">=</span> <span class="p">[</span><span class="n">Schema</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">validators</span><span class="p">]</span> - - <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">v</span><span class="p">):</span> + <span class="k">def</span> <span class="nf">_exec</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">funcs</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="k">try</span><span class="p">:</span> - <span class="k">for</span> <span class="n">schema</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_schemas</span><span class="p">:</span> - <span class="n">v</span> <span class="o">=</span> <span class="n">schema</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> + <span class="k">for</span> <span class="n">func</span> <span class="ow">in</span> <span class="n">funcs</span><span class="p">:</span> + <span class="k">if</span> <span class="n">path</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> + <span class="n">v</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">v</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="k">except</span> <span class="n">Invalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> - <span class="k">raise</span> <span class="n">e</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">is</span> <span class="bp">None</span> <span class="k">else</span> <span class="n">AllInvalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">)</span> - <span class="k">return</span> <span class="n">v</span> - - <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> - <span class="k">return</span> <span class="s1">'All(</span><span class="si">%s</span><span class="s1">, msg=</span><span class="si">%r</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span> - <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span><span class="p">),</span> - <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> - <span class="p">)</span></div> + <span class="k">raise</span> <span class="n">e</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">is</span> <span class="bp">None</span> <span class="k">else</span> <span class="n">AllInvalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">)</span> + <span class="k">return</span> <span class="n">v</span></div> <span class="c1"># Convenience alias</span> @@ -462,9 +478,13 @@ <span class="sd"> >>> with raises(FileInvalid, 'Not a file'):</span> <span class="sd"> ... IsFile()(None)</span> <span class="sd"> """</span> - <span class="k">if</span> <span class="n">v</span><span class="p">:</span> - <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> - <span class="k">else</span><span class="p">:</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">if</span> <span class="n">v</span><span class="p">:</span> + <span class="n">v</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> + <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">raise</span> <span class="n">FileInvalid</span><span class="p">(</span><span class="s1">'Not a file'</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">FileInvalid</span><span class="p">(</span><span class="s1">'Not a file'</span><span class="p">)</span></div> @@ -478,9 +498,13 @@ <span class="sd"> >>> with raises(DirInvalid, 'Not a directory'):</span> <span class="sd"> ... IsDir()(None)</span> <span class="sd"> """</span> - <span class="k">if</span> <span class="n">v</span><span class="p">:</span> - <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> - <span class="k">else</span><span class="p">:</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">if</span> <span class="n">v</span><span class="p">:</span> + <span class="n">v</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> + <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">raise</span> <span class="n">DirInvalid</span><span class="p">(</span><span class="s2">"Not a directory"</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">DirInvalid</span><span class="p">(</span><span class="s2">"Not a directory"</span><span class="p">)</span></div> @@ -496,12 +520,32 @@ <span class="sd"> >>> with raises(PathInvalid, 'Not a Path'):</span> <span class="sd"> ... PathExists()(None)</span> <span class="sd"> """</span> - <span class="k">if</span> <span class="n">v</span><span class="p">:</span> - <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> - <span class="k">else</span><span class="p">:</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">if</span> <span class="n">v</span><span class="p">:</span> + <span class="n">v</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> + <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">raise</span> <span class="n">PathInvalid</span><span class="p">(</span><span class="s2">"Not a Path"</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">PathInvalid</span><span class="p">(</span><span class="s2">"Not a Path"</span><span class="p">)</span></div> +<div class="viewcode-block" id="Maybe"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.validators.Maybe">[docs]</a><span class="k">def</span> <span class="nf">Maybe</span><span class="p">(</span><span class="n">validator</span><span class="p">):</span> + <span class="sd">"""Validate that the object matches given validator or is None.</span> + +<span class="sd"> :raises Invalid: if the value does not match the given validator and is not</span> +<span class="sd"> None</span> + +<span class="sd"> >>> s = Schema(Maybe(int))</span> +<span class="sd"> >>> s(10)</span> +<span class="sd"> 10</span> +<span class="sd"> >>> with raises(Invalid):</span> +<span class="sd"> ... s("string")</span> + +<span class="sd"> """</span> + <span class="k">return</span> <span class="n">Any</span><span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">validator</span><span class="p">)</span></div> + + <div class="viewcode-block" id="Range"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.validators.Range">[docs]</a><span class="k">class</span> <span class="nc">Range</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">"""Limit a value to a range.</span> @@ -635,15 +679,10 @@ <span class="sd">"""Validate that the value matches the date format."""</span> <span class="n">DEFAULT_FORMAT</span> <span class="o">=</span> <span class="s1">'%Y-%m-</span><span class="si">%d</span><span class="s1">'</span> - <span class="n">FORMAT_DESCRIPTION</span> <span class="o">=</span> <span class="s1">'yyyy-mm-dd'</span> <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">v</span><span class="p">):</span> <span class="k">try</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">format</span><span class="p">)</span> - <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">FORMAT_DESCRIPTION</span><span class="p">):</span> - <span class="k">raise</span> <span class="n">DateInvalid</span><span class="p">(</span> - <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="s1">'value has invalid length'</span> - <span class="s1">' expected length </span><span class="si">%d</span><span class="s1"> (</span><span class="si">%s</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">FORMAT_DESCRIPTION</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">FORMAT_DESCRIPTION</span><span class="p">))</span> <span class="k">except</span> <span class="p">(</span><span class="ne">TypeError</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">):</span> <span class="k">raise</span> <span class="n">DateInvalid</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="s1">'value does not match'</span> @@ -694,6 +733,33 @@ <span class="k">return</span> <span class="s1">'NotIn(</span><span class="si">%s</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="p">,)</span></div> +<div class="viewcode-block" id="Contains"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.validators.Contains">[docs]</a><span class="k">class</span> <span class="nc">Contains</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Validate that the given schema element is in the sequence being validated.</span> + +<span class="sd"> >>> s = Contains(1)</span> +<span class="sd"> >>> s([3, 2, 1])</span> +<span class="sd"> [3, 2, 1]</span> +<span class="sd"> >>> with raises(ContainsInvalid, 'value is not allowed'):</span> +<span class="sd"> ... s([3, 2])</span> +<span class="sd"> """</span> + + <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">item</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">item</span> <span class="o">=</span> <span class="n">item</span> + <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span> + + <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">v</span><span class="p">):</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">check</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">item</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">v</span> + <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span> + <span class="n">check</span> <span class="o">=</span> <span class="bp">True</span> + <span class="k">if</span> <span class="n">check</span><span class="p">:</span> + <span class="k">raise</span> <span class="n">ContainsInvalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="s1">'value is not allowed'</span><span class="p">)</span> + <span class="k">return</span> <span class="n">v</span> + + <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">return</span> <span class="s1">'Contains(</span><span class="si">%s</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">item</span><span class="p">,)</span></div> + + <div class="viewcode-block" id="ExactSequence"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.validators.ExactSequence">[docs]</a><span class="k">class</span> <span class="nc">ExactSequence</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">"""Matches each element in a sequence against the corresponding element in</span> <span class="sd"> the validators.</span> @@ -853,10 +919,8 @@ <span class="n">el</span> <span class="o">=</span> <span class="n">missing</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">raise</span> <span class="n">Invalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="s1">'Element #{} ({}) is not valid against any validator'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">el</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">el</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> <span class="k">elif</span> <span class="n">missing</span><span class="p">:</span> - <span class="k">raise</span> <span class="n">MultipleInvalid</span><span class="p">([</span> - <span class="n">Invalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="s1">'Element #{} ({}) is not valid against any validator'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">el</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">el</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> - <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">missing</span> - <span class="p">])</span> + <span class="k">raise</span> <span class="n">MultipleInvalid</span><span class="p">([</span><span class="n">Invalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="s1">'Element #{} ({}) is not valid against any validator'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> + <span class="n">el</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">el</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">missing</span><span class="p">])</span> <span class="k">return</span> <span class="n">v</span> <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> @@ -891,15 +955,16 @@ <span class="sd"> """</span> <span class="n">precision</span><span class="p">,</span> <span class="n">scale</span><span class="p">,</span> <span class="n">decimal_num</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_precision_scale</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> - <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">precision</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">scale</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span>\ - <span class="n">precision</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">precision</span> <span class="ow">and</span> <span class="n">scale</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scale</span><span class="p">:</span> - <span class="k">raise</span> <span class="n">Invalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="s2">"Precision must be equal to </span><span class="si">%s</span><span class="s2">, and Scale must be equal to </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">precision</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">scale</span><span class="p">))</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">precision</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">scale</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">precision</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">precision</span>\ + <span class="ow">and</span> <span class="n">scale</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scale</span><span class="p">:</span> + <span class="k">raise</span> <span class="n">Invalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="s2">"Precision must be equal to </span><span class="si">%s</span><span class="s2">, and Scale must be equal to </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">precision</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">scale</span><span class="p">))</span> <span class="k">else</span><span class="p">:</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">precision</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">precision</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">precision</span><span class="p">:</span> - <span class="k">raise</span> <span class="n">Invalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="s2">"Precision must be equal to </span><span class="si">%s</span><span class="s2">"</span><span class="o">%</span><span class="bp">self</span><span class="o">.</span><span class="n">precision</span><span class="p">)</span> + <span class="k">raise</span> <span class="n">Invalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="s2">"Precision must be equal to </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">precision</span><span class="p">)</span> - <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">scale</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">scale</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scale</span> <span class="p">:</span> - <span class="k">raise</span> <span class="n">Invalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="s2">"Scale must be equal to </span><span class="si">%s</span><span class="s2">"</span><span class="o">%</span><span class="bp">self</span><span class="o">.</span><span class="n">scale</span><span class="p">)</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">scale</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">scale</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scale</span><span class="p">:</span> + <span class="k">raise</span> <span class="n">Invalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="s2">"Scale must be equal to </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">scale</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">yield_decimal</span><span class="p">:</span> <span class="k">return</span> <span class="n">decimal_num</span> @@ -920,6 +985,66 @@ <span class="k">raise</span> <span class="n">Invalid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="ow">or</span> <span class="s1">'Value must be a number enclosed with string'</span><span class="p">)</span> <span class="k">return</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">decimal_num</span><span class="o">.</span><span class="n">as_tuple</span><span class="p">()</span><span class="o">.</span><span class="n">digits</span><span class="p">),</span> <span class="o">-</span><span class="p">(</span><span class="n">decimal_num</span><span class="o">.</span><span class="n">as_tuple</span><span class="p">()</span><span class="o">.</span><span class="n">exponent</span><span class="p">),</span> <span class="n">decimal_num</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="SomeOf"><a class="viewcode-back" href="../../voluptuous.html#voluptuous.validators.SomeOf">[docs]</a><span class="k">class</span> <span class="nc">SomeOf</span><span class="p">(</span><span class="n">_WithSubValidators</span><span class="p">):</span> + <span class="sd">"""Value must pass at least some validations, determined by the given parameter.</span> +<span class="sd"> Optionally, number of passed validations can be capped.</span> + +<span class="sd"> The output of each validator is passed as input to the next.</span> + +<span class="sd"> :param min_valid: Minimum number of valid schemas.</span> +<span class="sd"> :param validators: a list of schemas or validators to match input against</span> +<span class="sd"> :param max_valid: Maximum number of valid schemas.</span> +<span class="sd"> :param msg: Message to deliver to user if validation fails.</span> +<span class="sd"> :param kwargs: All other keyword arguments are passed to the sub-Schema constructors.</span> + +<span class="sd"> :raises NotEnoughValid: if the minimum number of validations isn't met</span> +<span class="sd"> :raises TooManyValid: if the more validations than the given amount is met</span> + +<span class="sd"> >>> validate = Schema(SomeOf(min_valid=2, validators=[Range(1, 5), Any(float, int), 6.6]))</span> +<span class="sd"> >>> validate(6.6)</span> +<span class="sd"> 6.6</span> +<span class="sd"> >>> validate(3)</span> +<span class="sd"> 3</span> +<span class="sd"> >>> with raises(MultipleInvalid, 'value must be at most 5, not a valid value'):</span> +<span class="sd"> ... validate(6.2)</span> +<span class="sd"> """</span> + + <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">validators</span><span class="p">,</span> <span class="n">min_valid</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">max_valid</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="k">assert</span> <span class="n">min_valid</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">max_valid</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">,</span> \ + <span class="s1">'when using "</span><span class="si">%s</span><span class="s1">" you should specify at least one of min_valid and max_valid'</span> <span class="o">%</span> <span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__name__</span><span class="p">,)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">min_valid</span> <span class="o">=</span> <span class="n">min_valid</span> <span class="ow">or</span> <span class="mi">0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">max_valid</span> <span class="o">=</span> <span class="n">max_valid</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">validators</span><span class="p">)</span> + <span class="nb">super</span><span class="p">(</span><span class="n">SomeOf</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">validators</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">_exec</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">funcs</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> + <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">funcs</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">funcs</span><span class="p">)</span> + <span class="k">for</span> <span class="n">func</span> <span class="ow">in</span> <span class="n">funcs</span><span class="p">:</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">if</span> <span class="n">path</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> + <span class="n">v</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">v</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> + <span class="k">except</span> <span class="n">Invalid</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> + <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> + + <span class="n">passed_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">funcs</span><span class="p">)</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">min_valid</span> <span class="o"><=</span> <span class="n">passed_count</span> <span class="o"><=</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_valid</span><span class="p">:</span> + <span class="k">return</span> <span class="n">v</span> + + <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">msg</span><span class="p">:</span> + <span class="n">msg</span> <span class="o">=</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">errors</span><span class="p">))</span> + + <span class="k">if</span> <span class="n">passed_count</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">max_valid</span><span class="p">:</span> + <span class="k">raise</span> <span class="n">TooManyValid</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> + <span class="k">raise</span> <span class="n">NotEnoughValid</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">return</span> <span class="s1">'SomeOf(min_valid=</span><span class="si">%s</span><span class="s1">, validators=[</span><span class="si">%s</span><span class="s1">], max_valid=</span><span class="si">%s</span><span class="s1">, msg=</span><span class="si">%r</span><span class="s1">)'</span> <span class="o">%</span> <span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">min_valid</span><span class="p">,</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">validators</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_valid</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">)</span></div> </pre></div> </div> diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html index e3030a6..4afb78d 100644 --- a/docs/_build/html/genindex.html +++ b/docs/_build/html/genindex.html @@ -123,16 +123,24 @@ <dt><a href="voluptuous.html#voluptuous.validators.Clamp">Clamp (class in voluptuous.validators)</a> </dt> - </dl></td> - <td style="width: 33%" valign="top"><dl> <dt><a href="voluptuous.html#voluptuous.validators.Coerce">Coerce (class in voluptuous.validators)</a> </dt> + </dl></td> + <td style="width: 33%" valign="top"><dl> <dt><a href="voluptuous.html#voluptuous.error.CoerceInvalid">CoerceInvalid</a> </dt> + + <dt><a href="voluptuous.html#voluptuous.validators.Contains">Contains (class in voluptuous.validators)</a> + </dt> + + + <dt><a href="voluptuous.html#voluptuous.error.ContainsInvalid">ContainsInvalid</a> + </dt> + </dl></td> </tr></table> @@ -256,10 +264,6 @@ </dl></td> <td style="width: 33%" valign="top"><dl> - <dt><a href="voluptuous.html#voluptuous.validators.Date.FORMAT_DESCRIPTION">FORMAT_DESCRIPTION (voluptuous.validators.Date attribute)</a> - </dt> - - <dt><a href="voluptuous.html#voluptuous.validators.FqdnUrl">FqdnUrl() (in module voluptuous.validators)</a> </dt> @@ -292,6 +296,10 @@ </dt> + <dt><a href="voluptuous.html#voluptuous.schema_builder.Schema.infer">infer() (voluptuous.schema_builder.Schema class method)</a> + </dt> + + <dt><a href="voluptuous.html#voluptuous.error.InInvalid">InInvalid</a> </dt> @@ -368,12 +376,16 @@ </dt> - <dt><a href="voluptuous.html#voluptuous.schema_builder.message">message() (in module voluptuous.schema_builder)</a> + <dt><a href="voluptuous.html#voluptuous.validators.Maybe">Maybe() (in module voluptuous.validators)</a> </dt> </dl></td> <td style="width: 33%" valign="top"><dl> + <dt><a href="voluptuous.html#voluptuous.schema_builder.message">message() (in module voluptuous.schema_builder)</a> + </dt> + + <dt><a href="voluptuous.html#voluptuous.schema_builder.Msg">Msg (class in voluptuous.schema_builder)</a> </dt> @@ -398,16 +410,20 @@ <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> - <dt><a href="voluptuous.html#voluptuous.validators.NotIn">NotIn (class in voluptuous.validators)</a> + <dt><a href="voluptuous.html#voluptuous.error.NotEnoughValid">NotEnoughValid</a> </dt> - <dt><a href="voluptuous.html#voluptuous.error.NotInInvalid">NotInInvalid</a> + <dt><a href="voluptuous.html#voluptuous.validators.NotIn">NotIn (class in voluptuous.validators)</a> </dt> </dl></td> <td style="width: 33%" valign="top"><dl> + <dt><a href="voluptuous.html#voluptuous.error.NotInInvalid">NotInInvalid</a> + </dt> + + <dt><a href="voluptuous.html#voluptuous.validators.Number">Number (class in voluptuous.validators)</a> </dt> @@ -520,6 +536,10 @@ </dt> + <dt><a href="voluptuous.html#voluptuous.schema_builder.Self">Self() (in module voluptuous.schema_builder)</a> + </dt> + + <dt><a href="voluptuous.html#voluptuous.error.SequenceTypeInvalid">SequenceTypeInvalid</a> </dt> @@ -534,6 +554,10 @@ </dt> + <dt><a href="voluptuous.html#voluptuous.validators.SomeOf">SomeOf (class in voluptuous.validators)</a> + </dt> + + <dt><a href="voluptuous.html#voluptuous.util.Strip">Strip() (in module voluptuous.util)</a> </dt> @@ -544,6 +568,26 @@ <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_all_error_has_path">test_all_error_has_path() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_any_error_has_path">test_any_error_has_path() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_class">test_class() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_comparing_voluptuous_object_to_str">test_comparing_voluptuous_object_to_str() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_contains">test_contains() (in module voluptuous.tests.tests)</a> + </dt> + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_copy_dict_undefined">test_copy_dict_undefined() (in module voluptuous.tests.tests)</a> </dt> @@ -552,10 +596,18 @@ </dt> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_date_custom_format">test_date_custom_format() (in module voluptuous.tests.tests)</a> + </dt> + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_datetime">test_datetime() (in module voluptuous.tests.tests)</a> </dt> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_description">test_description() (in module voluptuous.tests.tests)</a> + </dt> + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_email_validation">test_email_validation() (in module voluptuous.tests.tests)</a> </dt> @@ -572,15 +624,19 @@ </dt> - <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_empty_dict_as_exact">test_empty_dict_as_exact() (in module voluptuous.tests.tests)</a> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_empty_list_as_exact">test_empty_list_as_exact() (in module voluptuous.tests.tests)</a> </dt> - <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_empty_list_as_exact">test_empty_list_as_exact() (in module voluptuous.tests.tests)</a> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_equal">test_equal() (in module voluptuous.tests.tests)</a> </dt> - <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_equal">test_equal() (in module voluptuous.tests.tests)</a> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_equality">test_equality() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_equality_negative">test_equality_negative() (in module voluptuous.tests.tests)</a> </dt> @@ -620,6 +676,14 @@ </dt> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_frozenset_of_integers">test_frozenset_of_integers() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_frozenset_of_integers_and_strings">test_frozenset_of_integers_and_strings() (in module voluptuous.tests.tests)</a> + </dt> + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_humanize_error">test_humanize_error() (in module voluptuous.tests.tests)</a> </dt> @@ -628,6 +692,22 @@ </dt> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_inequality">test_inequality() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_inequality_negative">test_inequality_negative() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_IsDir">test_IsDir() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_IsFile">test_IsFile() (in module voluptuous.tests.tests)</a> + </dt> + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_iterate_candidates">test_iterate_candidates() (in module voluptuous.tests.tests)</a> </dt> @@ -640,6 +720,18 @@ </dt> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_marker_hashable">test_marker_hashable() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_match_error_has_path">test_match_error_has_path() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_maybe">test_maybe() (in module voluptuous.tests.tests)</a> + </dt> + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_named_tuples_validate_as_tuples">test_named_tuples_validate_as_tuples() (in module voluptuous.tests.tests)</a> </dt> @@ -694,6 +786,14 @@ </dt> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_ordered_dict">test_ordered_dict() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_PathExists">test_PathExists() (in module voluptuous.tests.tests)</a> + </dt> + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_range_exlcudes_nan">test_range_exlcudes_nan() (in module voluptuous.tests.tests)</a> </dt> @@ -726,6 +826,22 @@ </dt> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_schema_decorator_partial_match_called_with_args">test_schema_decorator_partial_match_called_with_args() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_schema_decorator_partial_match_called_with_kwargs">test_schema_decorator_partial_match_called_with_kwargs() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_schema_decorator_partial_unmatch_called_with_args">test_schema_decorator_partial_unmatch_called_with_args() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_schema_decorator_partial_unmatch_called_with_kwargs">test_schema_decorator_partial_unmatch_called_with_kwargs() (in module voluptuous.tests.tests)</a> + </dt> + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_schema_decorator_return_only_match">test_schema_decorator_return_only_match() (in module voluptuous.tests.tests)</a> </dt> @@ -762,23 +878,67 @@ </dt> - <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_sorting">test_sorting() (in module voluptuous.tests.tests)</a> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_schema_infer">test_schema_infer() (in module voluptuous.tests.tests)</a> </dt> - <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_subschema_extension">test_subschema_extension() (in module voluptuous.tests.tests)</a> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_schema_infer_accepts_kwargs">test_schema_infer_accepts_kwargs() (in module voluptuous.tests.tests)</a> </dt> - <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_to_utf8">test_to_utf8() (in module voluptuous.tests.tests)</a> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_schema_infer_dict">test_schema_infer_dict() (in module voluptuous.tests.tests)</a> </dt> - <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_unicode_key_is_converted_to_utf8_when_in_marker">test_unicode_key_is_converted_to_utf8_when_in_marker() (in module voluptuous.tests.tests)</a> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_schema_infer_list">test_schema_infer_list() (in module voluptuous.tests.tests)</a> </dt> - <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_unicode_key_is_converted_to_utf8_when_plain_text">test_unicode_key_is_converted_to_utf8_when_plain_text() (in module voluptuous.tests.tests)</a> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_schema_infer_scalar">test_schema_infer_scalar() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_self_all">test_self_all() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_self_any">test_self_any() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_self_validation">test_self_validation() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_set_of_integers">test_set_of_integers() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_set_of_integers_and_strings">test_set_of_integers_and_strings() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_SomeOf_max_validation">test_SomeOf_max_validation() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_SomeOf_min_validation">test_SomeOf_min_validation() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_SomeOf_on_bounds_assertion">test_SomeOf_on_bounds_assertion() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_sorting">test_sorting() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_subschema_extension">test_subschema_extension() (in module voluptuous.tests.tests)</a> + </dt> + + + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_unicode_as_key">test_unicode_as_key() (in module voluptuous.tests.tests)</a> </dt> @@ -802,11 +962,15 @@ </dt> + <dt><a href="voluptuous.tests.html#voluptuous.tests.tests.test_validation_performance">test_validation_performance() (in module voluptuous.tests.tests)</a> + </dt> + + <dt><a href="voluptuous.html#voluptuous.util.Title">Title() (in module voluptuous.util)</a> </dt> - <dt><a href="voluptuous.html#voluptuous.util.to_utf8_py2">to_utf8_py2() (in module voluptuous.util)</a> + <dt><a href="voluptuous.html#voluptuous.error.TooManyValid">TooManyValid</a> </dt> diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv Binary files differindex ceb8677..ab7d219 100644 --- a/docs/_build/html/objects.inv +++ b/docs/_build/html/objects.inv diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index 8e554f7..4124b25 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:50,filenames:["index","modules","voluptuous","voluptuous.tests"],objects:{"":{voluptuous:[2,0,0,"-"]},"voluptuous.error":{AllInvalid:[2,1,1,""],AnyInvalid:[2,1,1,""],BooleanInvalid:[2,1,1,""],CoerceInvalid:[2,1,1,""],DateInvalid:[2,1,1,""],DatetimeInvalid:[2,1,1,""],DictInvalid:[2,1,1,""],DirInvalid:[2,1,1,""],EmailInvalid:[2,1,1,""],Error:[2,1,1,""],ExactSequenceInvalid:[2,1,1,""],ExclusiveInvalid:[2,1,1,""],FalseInvalid:[2,1,1,""],FileInvalid:[2,1,1,""],InInvalid:[2,1,1,""],InclusiveInvalid:[2,1,1,""],Invalid:[2,1,1,""],LengthInvalid:[2,1,1,""],LiteralInvalid:[2,1,1,""],MatchInvalid:[2,1,1,""],MultipleInvalid:[2,1,1,""],NotInInvalid:[2,1,1,""],ObjectInvalid:[2,1,1,""],PathInvalid:[2,1,1,""],RangeInvalid:[2,1,1,""],RequiredFieldInvalid:[2,1,1,""],ScalarInvalid:[2,1,1,""],SchemaError:[2,1,1,""],SequenceTypeInvalid:[2,1,1,""],TrueInvalid:[2,1,1,""],TypeInvalid:[2,1,1,""],UrlInvalid:[2,1,1,""],ValueInvalid:[2,1,1,""]},"voluptuous.error.Invalid":{msg:[2,2,1,""],prepend:[2,3,1,""]},"voluptuous.error.MultipleInvalid":{add:[2,3,1,""],error_message:[2,2,1,""],msg:[2,2,1,""],path:[2,2,1,""],prepend:[2,3,1,""]},"voluptuous.humanize":{humanize_error:[2,4,1,""],validate_with_humanized_errors:[2,4,1,""]},"voluptuous.schema_builder":{Exclusive:[2,5,1,""],Extra:[2,4,1,""],Inclusive:[2,5,1,""],Marker:[2,5,1,""],Msg:[2,5,1,""],Object:[2,5,1,""],Optional:[2,5,1,""],Remove:[2,5,1,""],Required:[2,5,1,""],Schema:[2,5,1,""],Undefined:[2,5,1,""],VirtualPathComponent:[2,5,1,""],default_factory:[2,4,1,""],extra:[2,4,1,""],iteritems:[2,4,1,""],message:[2,4,1,""],raises:[2,4,1,""],validate:[2,4,1,""]},"voluptuous.schema_builder.Schema":{extend:[2,3,1,""]},"voluptuous.tests":{tests:[3,0,0,"-"]},"voluptuous.tests.tests":{test_copy_dict_undefined:[3,4,1,""],test_date:[3,4,1,""],test_datetime:[3,4,1,""],test_email_validation:[3,4,1,""],test_email_validation_with_empty_string:[3,4,1,""],test_email_validation_with_none:[3,4,1,""],test_email_validation_without_host:[3,4,1,""],test_empty_dict_as_exact:[3,4,1,""],test_empty_list_as_exact:[3,4,1,""],test_equal:[3,4,1,""],test_exact_sequence:[3,4,1,""],test_extra_empty_errors:[3,4,1,""],test_extra_with_required:[3,4,1,""],test_fix_157:[3,4,1,""],test_fqdn_url_validation:[3,4,1,""],test_fqdn_url_without_domain_name:[3,4,1,""],test_fqdnurl_validation_with_empty_string:[3,4,1,""],test_fqdnurl_validation_with_none:[3,4,1,""],test_fqdnurl_validation_without_host:[3,4,1,""],test_humanize_error:[3,4,1,""],test_in:[3,4,1,""],test_iterate_candidates:[3,4,1,""],test_list_validation_messages:[3,4,1,""],test_literal:[3,4,1,""],test_named_tuples_validate_as_tuples:[3,4,1,""],test_nested_multiple_validation_errors:[3,4,1,""],test_not_in:[3,4,1,""],test_number_validation_with_invalid_precision_invalid_scale:[3,4,1,""],test_number_validation_with_string:[3,4,1,""],test_number_validation_with_valid_precision_scale_yield_decimal_false:[3,4,1,""],test_number_validation_with_valid_precision_scale_yield_decimal_true:[3,4,1,""],test_number_when_invalid_precision_n_scale_none_yield_decimal_true:[3,4,1,""],test_number_when_precision_none_n_invalid_scale_yield_decimal_true:[3,4,1,""],test_number_when_precision_none_n_valid_scale_case1_yield_decimal_true:[3,4,1,""],test_number_when_precision_none_n_valid_scale_case2_yield_decimal_true:[3,4,1,""],test_number_when_precision_scale_none_yield_decimal_true:[3,4,1,""],test_number_when_valid_precision_n_scale_none_yield_decimal_true:[3,4,1,""],test_range_exlcudes_nan:[3,4,1,""],test_remove:[3,4,1,""],test_repr:[3,4,1,""],test_required:[3,4,1,""],test_schema_decorator_match_return_with_args:[3,4,1,""],test_schema_decorator_match_return_with_kwargs:[3,4,1,""],test_schema_decorator_match_with_args:[3,4,1,""],test_schema_decorator_match_with_kwargs:[3,4,1,""],test_schema_decorator_return_only_match:[3,4,1,""],test_schema_decorator_return_only_unmatch:[3,4,1,""],test_schema_decorator_unmatch_return_with_args:[3,4,1,""],test_schema_decorator_unmatch_return_with_kwargs:[3,4,1,""],test_schema_decorator_unmatch_with_args:[3,4,1,""],test_schema_decorator_unmatch_with_kwargs:[3,4,1,""],test_schema_extend:[3,4,1,""],test_schema_extend_key_swap:[3,4,1,""],test_schema_extend_overrides:[3,4,1,""],test_sorting:[3,4,1,""],test_subschema_extension:[3,4,1,""],test_to_utf8:[3,4,1,""],test_unicode_key_is_converted_to_utf8_when_in_marker:[3,4,1,""],test_unicode_key_is_converted_to_utf8_when_plain_text:[3,4,1,""],test_unordered:[3,4,1,""],test_url_validation:[3,4,1,""],test_url_validation_with_empty_string:[3,4,1,""],test_url_validation_with_none:[3,4,1,""],test_url_validation_without_host:[3,4,1,""]},"voluptuous.util":{Capitalize:[2,4,1,""],DefaultTo:[2,5,1,""],Literal:[2,5,1,""],Lower:[2,4,1,""],Set:[2,5,1,""],SetTo:[2,5,1,""],Strip:[2,4,1,""],Title:[2,4,1,""],Upper:[2,4,1,""],to_utf8_py2:[2,4,1,""],u:[2,4,1,""]},"voluptuous.validators":{All:[2,5,1,""],And:[2,2,1,""],Any:[2,5,1,""],Boolean:[2,4,1,""],Clamp:[2,5,1,""],Coerce:[2,5,1,""],Date:[2,5,1,""],Datetime:[2,5,1,""],Email:[2,4,1,""],Equal:[2,5,1,""],ExactSequence:[2,5,1,""],FqdnUrl:[2,4,1,""],In:[2,5,1,""],IsDir:[2,4,1,""],IsFalse:[2,4,1,""],IsFile:[2,4,1,""],IsTrue:[2,4,1,""],Length:[2,5,1,""],Match:[2,5,1,""],NotIn:[2,5,1,""],Number:[2,5,1,""],Or:[2,2,1,""],PathExists:[2,4,1,""],Range:[2,5,1,""],Replace:[2,5,1,""],Unique:[2,5,1,""],Unordered:[2,5,1,""],Url:[2,4,1,""],truth:[2,4,1,""]},"voluptuous.validators.Date":{DEFAULT_FORMAT:[2,2,1,""],FORMAT_DESCRIPTION:[2,2,1,""]},"voluptuous.validators.Datetime":{DEFAULT_FORMAT:[2,2,1,""]},voluptuous:{error:[2,0,0,"-"],humanize:[2,0,0,"-"],schema_builder:[2,0,0,"-"],tests:[3,0,0,"-"],util:[2,0,0,"-"],validators:[2,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","exception","Python exception"],"2":["py","attribute","Python attribute"],"3":["py","method","Python method"],"4":["py","function","Python function"],"5":["py","class","Python class"]},objtypes:{"0":"py:module","1":"py:exception","2":"py:attribute","3":"py:method","4":"py:function","5":"py:class"},terms:{"0x123ef4":2,"123ef4":2,"__eq__":2,"__file__":2,"__repr__":3,"__return__":2,"__str__":2,"_compil":2,"boolean":2,"break":3,"case":[2,3],"class":2,"default":2,"float":2,"function":2,"import":2,"int":2,"new":2,"return":[2,3],"throw":2,"true":2,"try":2,aabbc:2,abc:2,accept:2,actual:2,add:[2,3],against:2,alia:2,all:2,allinvalid:2,allow:2,alpha:2,alphabet:3,also:2,angl:2,ani:2,any:2,anyinvalid:2,api:2,appli:2,aren:2,arg1:2,arg2:2,arg:2,argument:2,arrai:2,assert:2,attr:2,attribut:2,auth:2,authent:2,automat:2,avail:3,bad:2,bar:2,barfoo:2,base:2,basenam:2,basestr:2,basi:2,behavior:2,beta:2,bool:2,booleaninvalid:2,both:[2,3],buffer:2,callabl:2,can:[2,3],candid:3,cannot:2,capit:2,capitalis:2,cast:2,certain:2,check:2,clamp:2,classic:2,clsoverrid:2,coerc:2,coerceinvalid:2,collect:2,com:2,comparison:2,compil:2,complet:2,constructor:2,contain:2,content:[],conveni:2,convert:2,copi:3,correct:2,correspond:2,creat:2,custom:2,data:2,date:2,dateinvalid:2,datetim:2,datetimeinvalid:2,decim:[2,3],decor:2,def:2,default_factori:2,default_format:2,default_valu:2,defaultto:2,deliv:2,descend:2,detail:2,dict:2,dictinvalid:2,dictionari:[2,3],did:2,differ:3,digit:2,direct:2,directori:2,dirinvalid:2,doe:[2,3],dog:2,domain:[2,3],dupe:2,duplic:2,each:2,either:2,element:2,email:[2,3],emailinvalid:2,empti:[2,3],enabl:2,encount:2,ensur:2,ensure:2,entir:2,equal:2,equat:2,error:[],error_messag:2,error_typ:2,etc:2,evalu:2,even:3,exact:2,exactsequ:2,exactsequenceinvalid:2,exampl:2,exc:2,except:[2,3],exception:2,exclud:2,exclus:2,exclusiv:2,exclusiveinvalid:2,exist:2,expect:[2,3],express:[2,3],extend:[2,3],extra:[2,3],fail:2,fals:2,falseinvalid:2,field:2,file:2,fileinvalid:2,filenam:2,first:2,flag:2,foo:2,format:2,format_description:2,found:2,fqdn:3,fqdnurl:2,friendli:2,from:[2,3],fulli:[2,3],given:2,goodby:2,green:2,group:2,group_of_exclus:2,group_of_inclus:2,height:2,hello:2,help:2,higher:2,host:3,hourly_report:2,http:2,human:[],humanize_error:2,ignor:2,imag:2,implicitli:2,impossibl:2,includ:2,inclus:2,inclusiv:2,inclusiveinvalid:2,index:0,indicat:2,inherit:2,ininvalid:2,input:2,insid:2,instead:2,integ:2,integerinvalid:2,intern:2,invalid:[2,3],isdir:2,isfals:2,isfile:2,isinst:2,isint:2,istrue:2,item:2,iter:[2,3],iteritem:2,jpeg:2,jpg:2,json:2,keep:2,kei:[2,3],key2:2,keyerror:2,keyword:2,kwarg:2,length:2,lengthinvalid:2,like:2,limit:2,list:2,lit:2,liter:[2,3],literalinvalid:2,localhost:2,lower:2,mai:2,make:[2,3],map:3,mark:2,marker:[2,3],match:2,matchinvalid:2,max:2,max_includ:2,max_sub_error_length:2,mean:2,merg:2,messag:[2,3],mimetyp:2,min:2,min_includ:2,miss:2,modifi:2,modul:[],moo:2,more:2,most:2,msg:2,multipl:2,multipleinvalid:2,must:2,name:[2,3],nativ:2,need:2,neg:2,neither:2,next:2,node:2,non:2,none:[2,3],nor:2,notavaliddir:2,notin:[2,3],notininvalid:2,number:[2,3],object:2,objectinvalid:2,offend:2,okai:2,omit:2,onli:2,only:2,option:2,optional:2,order:[2,3],org:2,other:2,output:2,outsid:2,over:3,overrid:[2,3],overridden:2,packag:[],page:0,paramet:[2,3],part:3,pass:2,password:2,path:2,pathexist:2,pathinvalid:2,pattern:2,per:2,perform:2,place:2,pleas:2,precis:[2,3],prefix:3,prepend:2,present:2,previou:2,provid:2,python:[2,3],qualifi:[2,3],rais:2,random_filename_goes_her:2,rang:2,rangeinvalid:2,readabl:2,red:2,regardless:2,regex:2,regular:2,remov:[2,3],replac:[2,3],report:2,requir:[2,3],requiredfieldinvalid:2,restrict:2,result:2,right:3,sai:2,same:2,scalar:2,scalarinvalid:2,scale:[2,3],schema:[2,3],schema_:2,schema_build:[],schemaerror:2,search:0,secret_kei:2,see:2,sens:2,separ:2,sequenc:2,sequencetypeinvalid:2,set:2,setto:2,should:2,size:2,social:2,social_network:2,some:2,sort:3,sourc:[2,3],special:2,startswith:2,str:2,string:[2,3],strip:2,structur:2,sub:2,subclas:2,subclass:2,submodul:[],subpackag:[],subschema:3,substitut:2,support:2,sure:3,target:2,temp:2,test:[],test_copy_dict_undefin:3,test_dat:3,test_datetim:3,test_email_valid:3,test_email_validation_with_empty_str:3,test_email_validation_with_non:3,test_email_validation_without_host:3,test_empty_dict_as_exact:3,test_empty_list_as_exact:3,test_equ:3,test_exact_sequ:3,test_extra_empty_error:3,test_extra_with_requir:3,test_fix_157:3,test_fqdn_url_valid:3,test_fqdn_url_without_domain_nam:3,test_fqdnurl_validation_with_empty_str:3,test_fqdnurl_validation_with_non:3,test_fqdnurl_validation_without_host:3,test_humanize_error:3,test_in:3,test_iterate_candid:3,test_list_validation_messag:3,test_liter:3,test_named_tuples_validate_as_tupl:3,test_nested_multiple_validation_error:3,test_not_in:3,test_number_validation_with_invalid_precision_invalid_scal:3,test_number_validation_with_str:3,test_number_validation_with_valid_precision_scale_yield_decimal_fals:3,test_number_validation_with_valid_precision_scale_yield_decimal_tru:3,test_number_when_invalid_precision_n_scale_none_yield_decimal_tru:3,test_number_when_precision_none_n_invalid_scale_yield_decimal_tru:3,test_number_when_precision_none_n_valid_scale_case1_yield_decimal_tru:3,test_number_when_precision_none_n_valid_scale_case2_yield_decimal_tru:3,test_number_when_precision_scale_none_yield_decimal_tru:3,test_number_when_valid_precision_n_scale_none_yield_decimal_tru:3,test_range_exlcudes_nan:3,test_remov:3,test_repr:3,test_requir:3,test_schema_decorator_match_return_with_arg:3,test_schema_decorator_match_return_with_kwarg:3,test_schema_decorator_match_with_arg:3,test_schema_decorator_match_with_kwarg:3,test_schema_decorator_return_only_match:3,test_schema_decorator_return_only_unmatch:3,test_schema_decorator_unmatch_return_with_arg:3,test_schema_decorator_unmatch_return_with_kwarg:3,test_schema_decorator_unmatch_with_arg:3,test_schema_decorator_unmatch_with_kwarg:3,test_schema_extend:3,test_schema_extend_key_swap:3,test_schema_extend_overrid:3,test_sort:3,test_subschema_extens:3,test_to_utf8:3,test_unicode_key_is_converted_to_utf8_when_in_mark:3,test_unicode_key_is_converted_to_utf8_when_plain_text:3,test_unord:3,test_url_valid:3,test_url_validation_with_empty_str:3,test_url_validation_with_non:3,test_url_validation_without_host:3,than:2,thei:2,thi:2,three:2,thrown:[2,3],time:2,titl:2,to_utf8_py2:2,togeth:2,token:2,too:2,transform:2,treat:2,treatment:2,tree:2,trueinvalid:2,truth:2,two:2,type:2,typeerror:2,typeinvalid:2,undefin:2,unhash:2,unicod:[2,3],uniqu:2,unless:2,unorder:2,unspecifi:2,upper:2,url:[2,3],urlinvalid:2,use:2,user:2,util:[],valid:[],validate_with_humanized_error:2,validation_error:2,valu:2,valueerror:2,valueinvalid:2,verifi:[2,3],virtualpathcompon:2,when:3,where:2,which:2,whitespac:2,width:2,work:[2,3],world:2,wrap:2,yield_decim:[2,3],you:2,yyyi:2,zero:3},titles:["Welcome to Voluptuous’s documentation!","voluptuous","voluptuous package","voluptuous.tests package"],titleterms:{content:[2,3],document:0,error:2,human:2,indice:0,modul:[2,3],packag:[2,3],schema_build:2,submodul:[2,3],subpackag:2,tabl:0,test:3,util:2,valid:2,voluptu:[0,1,2,3],welcom:0}})
\ No newline at end of file +Search.setIndex({envversion:50,filenames:["index","modules","voluptuous","voluptuous.tests"],objects:{"":{voluptuous:[2,0,0,"-"]},"voluptuous.error":{AllInvalid:[2,1,1,""],AnyInvalid:[2,1,1,""],BooleanInvalid:[2,1,1,""],CoerceInvalid:[2,1,1,""],ContainsInvalid:[2,1,1,""],DateInvalid:[2,1,1,""],DatetimeInvalid:[2,1,1,""],DictInvalid:[2,1,1,""],DirInvalid:[2,1,1,""],EmailInvalid:[2,1,1,""],Error:[2,1,1,""],ExactSequenceInvalid:[2,1,1,""],ExclusiveInvalid:[2,1,1,""],FalseInvalid:[2,1,1,""],FileInvalid:[2,1,1,""],InInvalid:[2,1,1,""],InclusiveInvalid:[2,1,1,""],Invalid:[2,1,1,""],LengthInvalid:[2,1,1,""],LiteralInvalid:[2,1,1,""],MatchInvalid:[2,1,1,""],MultipleInvalid:[2,1,1,""],NotEnoughValid:[2,1,1,""],NotInInvalid:[2,1,1,""],ObjectInvalid:[2,1,1,""],PathInvalid:[2,1,1,""],RangeInvalid:[2,1,1,""],RequiredFieldInvalid:[2,1,1,""],ScalarInvalid:[2,1,1,""],SchemaError:[2,1,1,""],SequenceTypeInvalid:[2,1,1,""],TooManyValid:[2,1,1,""],TrueInvalid:[2,1,1,""],TypeInvalid:[2,1,1,""],UrlInvalid:[2,1,1,""],ValueInvalid:[2,1,1,""]},"voluptuous.error.Invalid":{msg:[2,2,1,""],prepend:[2,3,1,""]},"voluptuous.error.MultipleInvalid":{add:[2,3,1,""],error_message:[2,2,1,""],msg:[2,2,1,""],path:[2,2,1,""],prepend:[2,3,1,""]},"voluptuous.humanize":{humanize_error:[2,4,1,""],validate_with_humanized_errors:[2,4,1,""]},"voluptuous.schema_builder":{Exclusive:[2,5,1,""],Extra:[2,4,1,""],Inclusive:[2,5,1,""],Marker:[2,5,1,""],Msg:[2,5,1,""],Object:[2,5,1,""],Optional:[2,5,1,""],Remove:[2,5,1,""],Required:[2,5,1,""],Schema:[2,5,1,""],Self:[2,4,1,""],Undefined:[2,5,1,""],VirtualPathComponent:[2,5,1,""],default_factory:[2,4,1,""],extra:[2,4,1,""],iteritems:[2,4,1,""],message:[2,4,1,""],raises:[2,4,1,""],validate:[2,4,1,""]},"voluptuous.schema_builder.Schema":{extend:[2,3,1,""],infer:[2,6,1,""]},"voluptuous.tests":{tests:[3,0,0,"-"]},"voluptuous.tests.tests":{test_IsDir:[3,4,1,""],test_IsFile:[3,4,1,""],test_PathExists:[3,4,1,""],test_SomeOf_max_validation:[3,4,1,""],test_SomeOf_min_validation:[3,4,1,""],test_SomeOf_on_bounds_assertion:[3,4,1,""],test_all_error_has_path:[3,4,1,""],test_any_error_has_path:[3,4,1,""],test_class:[3,4,1,""],test_comparing_voluptuous_object_to_str:[3,4,1,""],test_contains:[3,4,1,""],test_copy_dict_undefined:[3,4,1,""],test_date:[3,4,1,""],test_date_custom_format:[3,4,1,""],test_datetime:[3,4,1,""],test_description:[3,4,1,""],test_email_validation:[3,4,1,""],test_email_validation_with_empty_string:[3,4,1,""],test_email_validation_with_none:[3,4,1,""],test_email_validation_without_host:[3,4,1,""],test_empty_list_as_exact:[3,4,1,""],test_equal:[3,4,1,""],test_equality:[3,4,1,""],test_equality_negative:[3,4,1,""],test_exact_sequence:[3,4,1,""],test_extra_empty_errors:[3,4,1,""],test_extra_with_required:[3,4,1,""],test_fix_157:[3,4,1,""],test_fqdn_url_validation:[3,4,1,""],test_fqdn_url_without_domain_name:[3,4,1,""],test_fqdnurl_validation_with_empty_string:[3,4,1,""],test_fqdnurl_validation_with_none:[3,4,1,""],test_fqdnurl_validation_without_host:[3,4,1,""],test_frozenset_of_integers:[3,4,1,""],test_frozenset_of_integers_and_strings:[3,4,1,""],test_humanize_error:[3,4,1,""],test_in:[3,4,1,""],test_inequality:[3,4,1,""],test_inequality_negative:[3,4,1,""],test_iterate_candidates:[3,4,1,""],test_list_validation_messages:[3,4,1,""],test_literal:[3,4,1,""],test_marker_hashable:[3,4,1,""],test_match_error_has_path:[3,4,1,""],test_maybe:[3,4,1,""],test_named_tuples_validate_as_tuples:[3,4,1,""],test_nested_multiple_validation_errors:[3,4,1,""],test_not_in:[3,4,1,""],test_number_validation_with_invalid_precision_invalid_scale:[3,4,1,""],test_number_validation_with_string:[3,4,1,""],test_number_validation_with_valid_precision_scale_yield_decimal_false:[3,4,1,""],test_number_validation_with_valid_precision_scale_yield_decimal_true:[3,4,1,""],test_number_when_invalid_precision_n_scale_none_yield_decimal_true:[3,4,1,""],test_number_when_precision_none_n_invalid_scale_yield_decimal_true:[3,4,1,""],test_number_when_precision_none_n_valid_scale_case1_yield_decimal_true:[3,4,1,""],test_number_when_precision_none_n_valid_scale_case2_yield_decimal_true:[3,4,1,""],test_number_when_precision_scale_none_yield_decimal_true:[3,4,1,""],test_number_when_valid_precision_n_scale_none_yield_decimal_true:[3,4,1,""],test_ordered_dict:[3,4,1,""],test_range_exlcudes_nan:[3,4,1,""],test_remove:[3,4,1,""],test_repr:[3,4,1,""],test_required:[3,4,1,""],test_schema_decorator_match_return_with_args:[3,4,1,""],test_schema_decorator_match_return_with_kwargs:[3,4,1,""],test_schema_decorator_match_with_args:[3,4,1,""],test_schema_decorator_match_with_kwargs:[3,4,1,""],test_schema_decorator_partial_match_called_with_args:[3,4,1,""],test_schema_decorator_partial_match_called_with_kwargs:[3,4,1,""],test_schema_decorator_partial_unmatch_called_with_args:[3,4,1,""],test_schema_decorator_partial_unmatch_called_with_kwargs:[3,4,1,""],test_schema_decorator_return_only_match:[3,4,1,""],test_schema_decorator_return_only_unmatch:[3,4,1,""],test_schema_decorator_unmatch_return_with_args:[3,4,1,""],test_schema_decorator_unmatch_return_with_kwargs:[3,4,1,""],test_schema_decorator_unmatch_with_args:[3,4,1,""],test_schema_decorator_unmatch_with_kwargs:[3,4,1,""],test_schema_extend:[3,4,1,""],test_schema_extend_key_swap:[3,4,1,""],test_schema_extend_overrides:[3,4,1,""],test_schema_infer:[3,4,1,""],test_schema_infer_accepts_kwargs:[3,4,1,""],test_schema_infer_dict:[3,4,1,""],test_schema_infer_list:[3,4,1,""],test_schema_infer_scalar:[3,4,1,""],test_self_all:[3,4,1,""],test_self_any:[3,4,1,""],test_self_validation:[3,4,1,""],test_set_of_integers:[3,4,1,""],test_set_of_integers_and_strings:[3,4,1,""],test_sorting:[3,4,1,""],test_subschema_extension:[3,4,1,""],test_unicode_as_key:[3,4,1,""],test_unordered:[3,4,1,""],test_url_validation:[3,4,1,""],test_url_validation_with_empty_string:[3,4,1,""],test_url_validation_with_none:[3,4,1,""],test_url_validation_without_host:[3,4,1,""],test_validation_performance:[3,4,1,""]},"voluptuous.util":{Capitalize:[2,4,1,""],DefaultTo:[2,5,1,""],Literal:[2,5,1,""],Lower:[2,4,1,""],Set:[2,5,1,""],SetTo:[2,5,1,""],Strip:[2,4,1,""],Title:[2,4,1,""],Upper:[2,4,1,""],u:[2,4,1,""]},"voluptuous.validators":{All:[2,5,1,""],And:[2,2,1,""],Any:[2,5,1,""],Boolean:[2,4,1,""],Clamp:[2,5,1,""],Coerce:[2,5,1,""],Contains:[2,5,1,""],Date:[2,5,1,""],Datetime:[2,5,1,""],Email:[2,4,1,""],Equal:[2,5,1,""],ExactSequence:[2,5,1,""],FqdnUrl:[2,4,1,""],In:[2,5,1,""],IsDir:[2,4,1,""],IsFalse:[2,4,1,""],IsFile:[2,4,1,""],IsTrue:[2,4,1,""],Length:[2,5,1,""],Match:[2,5,1,""],Maybe:[2,4,1,""],NotIn:[2,5,1,""],Number:[2,5,1,""],Or:[2,2,1,""],PathExists:[2,4,1,""],Range:[2,5,1,""],Replace:[2,5,1,""],SomeOf:[2,5,1,""],Unique:[2,5,1,""],Unordered:[2,5,1,""],Url:[2,4,1,""],truth:[2,4,1,""]},"voluptuous.validators.Date":{DEFAULT_FORMAT:[2,2,1,""]},"voluptuous.validators.Datetime":{DEFAULT_FORMAT:[2,2,1,""]},voluptuous:{error:[2,0,0,"-"],humanize:[2,0,0,"-"],schema_builder:[2,0,0,"-"],tests:[3,0,0,"-"],util:[2,0,0,"-"],validators:[2,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","exception","Python exception"],"2":["py","attribute","Python attribute"],"3":["py","method","Python method"],"4":["py","function","Python function"],"5":["py","class","Python class"],"6":["py","classmethod","Python class method"]},objtypes:{"0":"py:module","1":"py:exception","2":"py:attribute","3":"py:method","4":"py:function","5":"py:class","6":"py:classmethod"},terms:{"0x123ef4":2,"123ef4":2,"__eq__":2,"__file__":2,"__repr__":3,"__return__":2,"__str__":2,"_compil":2,"_withsubvalid":2,"boolean":2,"break":3,"case":[2,3],"class":2,"default":2,"float":2,"function":2,"import":2,"int":2,"new":2,"return":[2,3],"throw":2,"true":2,"try":2,aabbc:2,abc:2,accept:2,achiev:3,actual:2,add:[2,3],against:2,alecthoma:3,alia:2,all:2,allinvalid:2,allow:2,alpha:2,alphabet:3,also:2,amount:2,angl:2,ani:2,any:2,anyinvalid:2,api:2,appli:2,aren:2,arg1:2,arg2:2,arg:2,argument:2,arrai:2,assert:2,attr:2,attribut:2,auth:2,authent:2,automat:2,avail:3,bad:2,bar:2,barfoo:2,base:2,basenam:2,basestr:2,basi:2,basic:2,baz:2,behavior:2,beta:2,bool:2,booleaninvalid:2,both:[2,3],buffer:2,callabl:2,can:[2,3],candid:3,cannot:2,cap:2,capit:2,capitalis:2,cast:2,certain:2,check:2,clamp:2,classic:2,classmethod:2,clsoverrid:2,coerc:2,coerceinvalid:2,collect:2,com:[2,3],come:3,comparison:2,compil:2,complet:2,complex:3,concret:2,constructor:2,contain:[2,3],containsinvalid:2,content:[],conveni:2,convert:2,copi:3,correct:2,correspond:2,count:3,creat:2,custom:[2,3],data:2,date:2,dateinvalid:2,datetim:2,datetimeinvalid:2,decim:[2,3],decor:2,def:2,default_factori:2,default_format:2,default_valu:2,defaultto:2,deliv:2,descend:2,descript:2,detail:2,determin:[2,3],dict:2,dictinvalid:2,dictionari:[2,3],did:2,differ:3,digit:2,direct:2,directori:2,dirinvalid:2,dishwash:2,doe:[2,3],dog:2,domain:[2,3],done:3,dupe:2,duplic:2,each:[2,3],either:2,element:2,email:[2,3],emailinvalid:2,empti:[2,3],enabl:2,encount:2,enough:2,ensur:2,ensure:2,entir:2,equal:[2,3],equat:2,error:[],error_messag:2,error_typ:2,etc:2,evalu:[2,3],even:3,exact:2,exactsequ:2,exactsequenceinvalid:2,exampl:2,exc:2,except:2,exception:2,exclud:2,exclus:2,exclusiv:2,exclusiveinvalid:2,exist:2,expect:[2,3],exponenti:3,express:[2,3],extend:[2,3],extra:[2,3],fail:2,fals:2,falseinvalid:2,field:2,file:2,fileinvalid:2,filenam:2,first:2,flag:2,foo:2,format:2,format_description:[],found:2,fqdn:3,fqdnurl:2,friendli:2,from:[2,3],fulli:[2,3],get:3,github:3,given:2,goodby:2,green:2,group:2,group_of_exclus:2,group_of_inclus:2,height:2,hello:2,help:2,higher:2,host:3,hourly_report:2,http:[2,3],human:[],humanize_error:2,ignor:2,imag:2,implicitli:2,impossibl:2,includ:2,inclus:2,inclusiv:2,inclusiveinvalid:2,index:0,indicat:2,infer:2,inherit:2,ininvalid:2,input:2,insid:2,instead:2,integ:2,integerinvalid:2,intern:2,invalid:[2,3],isdir:2,isfals:2,isfile:2,isinst:2,isint:2,isn:2,issu:3,istrue:2,item:2,iter:[2,3],iteritem:2,jpeg:2,jpg:2,json:2,keep:2,kei:[2,3],key2:2,keyerror:2,keyword:2,kwarg:2,least:2,length:2,lengthinvalid:2,like:2,limit:2,linear:3,list:2,lit:2,liter:[2,3],literalinvalid:2,localhost:2,lower:2,mai:2,make:[2,3],map:3,mark:2,marker:[2,3],match:2,matchinvalid:2,max:2,max_includ:2,max_sub_error_length:2,max_valid:2,maximum:2,mayb:2,mean:2,merg:2,messag:[2,3],met:2,method:3,mimetyp:2,min:2,min_includ:2,min_valid:2,minimum:2,miss:2,modifi:2,modul:[],monkei:2,moo:2,more:2,most:2,msg:2,multipl:2,multipleinvalid:2,must:2,name:[2,3],nativ:2,need:2,neg:2,neither:2,next:2,node:2,non:2,none:[2,3],nor:2,notavaliddir:2,note:2,notenoughvalid:2,notin:[2,3],notininvalid:2,number:[2,3],object:[2,3],objectinvalid:2,offend:2,okai:2,omit:2,onli:2,only:2,option:2,optional:2,order:[2,3],org:2,other:2,output:2,outsid:2,over:3,overrid:[2,3],overridden:2,packag:[],page:0,paramet:[2,3],part:3,pass:2,password:2,path:2,pathexist:2,pathinvalid:2,pattern:2,per:2,perform:2,place:2,pleas:2,precis:[2,3],prefix:[],prepend:2,present:2,previou:2,prior:3,provid:2,purpl:2,python:[2,3],qualifi:[2,3],rais:2,random_filename_goes_her:2,rang:2,rangeinvalid:2,readabl:2,red:2,regardless:2,regex:2,regular:2,remov:[2,3],replac:[2,3],report:2,represent:3,requir:[2,3],requiredfieldinvalid:2,respons:2,restrict:2,result:2,right:3,sai:2,same:2,scalar:2,scalarinvalid:2,scale:[2,3],schema:[2,3],schema_:2,schema_build:[],schemaerror:2,scheme:3,search:0,secret_kei:2,see:2,self:2,sens:2,separ:2,sequenc:2,sequencetypeinvalid:2,set:2,setto:2,should:2,size:2,social:2,social_network:2,some:2,someof:2,sort:3,sourc:[2,3],special:2,startswith:2,str:2,string:[2,3],strip:2,structur:2,sub:2,subclas:2,subclass:2,submodul:[],subpackag:[],subschema:3,substitut:2,support:2,sure:3,take:2,target:2,temp:2,test:[],test_all_error_has_path:3,test_any_error_has_path:3,test_class:3,test_comparing_voluptuous_object_to_str:3,test_contain:3,test_copy_dict_undefin:3,test_dat:3,test_date_custom_format:3,test_datetim:3,test_descript:3,test_email_valid:3,test_email_validation_with_empty_str:3,test_email_validation_with_non:3,test_email_validation_without_host:3,test_empty_dict_as_exact:[],test_empty_list_as_exact:3,test_equ:3,test_equality_neg:3,test_exact_sequ:3,test_extra_empty_error:3,test_extra_with_requir:3,test_fix_157:3,test_fqdn_url_valid:3,test_fqdn_url_without_domain_nam:3,test_fqdnurl_validation_with_empty_str:3,test_fqdnurl_validation_with_non:3,test_fqdnurl_validation_without_host:3,test_frozenset_of_integ:3,test_frozenset_of_integers_and_str:3,test_humanize_error:3,test_in:3,test_inequ:3,test_inequality_neg:3,test_isdir:3,test_isfil:3,test_iterate_candid:3,test_list_validation_messag:3,test_liter:3,test_marker_hash:3,test_match_error_has_path:3,test_mayb:3,test_named_tuples_validate_as_tupl:3,test_nested_multiple_validation_error:3,test_not_in:3,test_number_validation_with_invalid_precision_invalid_scal:3,test_number_validation_with_str:3,test_number_validation_with_valid_precision_scale_yield_decimal_fals:3,test_number_validation_with_valid_precision_scale_yield_decimal_tru:3,test_number_when_invalid_precision_n_scale_none_yield_decimal_tru:3,test_number_when_precision_none_n_invalid_scale_yield_decimal_tru:3,test_number_when_precision_none_n_valid_scale_case1_yield_decimal_tru:3,test_number_when_precision_none_n_valid_scale_case2_yield_decimal_tru:3,test_number_when_precision_scale_none_yield_decimal_tru:3,test_number_when_valid_precision_n_scale_none_yield_decimal_tru:3,test_ordered_dict:3,test_pathexist:3,test_range_exlcudes_nan:3,test_remov:3,test_repr:3,test_requir:3,test_schema_decorator_match_return_with_arg:3,test_schema_decorator_match_return_with_kwarg:3,test_schema_decorator_match_with_arg:3,test_schema_decorator_match_with_kwarg:3,test_schema_decorator_partial_match_called_with_arg:3,test_schema_decorator_partial_match_called_with_kwarg:3,test_schema_decorator_partial_unmatch_called_with_arg:3,test_schema_decorator_partial_unmatch_called_with_kwarg:3,test_schema_decorator_return_only_match:3,test_schema_decorator_return_only_unmatch:3,test_schema_decorator_unmatch_return_with_arg:3,test_schema_decorator_unmatch_return_with_kwarg:3,test_schema_decorator_unmatch_with_arg:3,test_schema_decorator_unmatch_with_kwarg:3,test_schema_extend:3,test_schema_extend_key_swap:3,test_schema_extend_overrid:3,test_schema_inf:3,test_schema_infer_accepts_kwarg:3,test_schema_infer_dict:3,test_schema_infer_list:3,test_schema_infer_scalar:3,test_self_al:3,test_self_ani:3,test_self_valid:3,test_set_of_integ:3,test_set_of_integers_and_str:3,test_someof_max_valid:3,test_someof_min_valid:3,test_someof_on_bounds_assert:3,test_sort:3,test_subschema_extens:3,test_to_utf8:[],test_unicode_as_kei:3,test_unicode_key_is_converted_to_utf8_when_in_mark:[],test_unicode_key_is_converted_to_utf8_when_plain_text:[],test_unord:3,test_url_valid:3,test_url_validation_with_empty_str:3,test_url_validation_with_non:3,test_url_validation_without_host:3,test_validation_perform:3,than:2,thei:2,thi:[2,3],three:2,thrown:2,time:[2,3],titl:2,to_utf8_py2:[],togeth:2,token:2,too:2,toomanyvalid:2,transform:2,treat:2,treatment:2,tree:2,trueinvalid:2,truth:2,two:2,type:2,typeerror:2,typeinvalid:2,undefin:2,unhash:2,unicod:2,uniqu:2,unless:2,unorder:2,unspecifi:2,upper:2,url:[2,3],urlinvalid:2,use:2,user:2,util:[],valid:[],validate_with_humanized_error:2,validation_error:2,valu:2,valueerror:2,valueinvalid:2,veri:2,verifi:[2,3],virtualpathcompon:2,were:3,when:3,where:2,which:2,whitespac:2,width:2,work:[2,3],world:2,wrap:2,yield_decim:[2,3],you:[2,3],yyyi:[],zero:3},titles:["Welcome to Voluptuous’s documentation!","voluptuous","voluptuous package","voluptuous.tests package"],titleterms:{content:[2,3],document:0,error:2,human:2,indice:0,modul:[2,3],packag:[2,3],schema_build:2,submodul:[2,3],subpackag:2,tabl:0,test:3,util:2,valid:2,voluptu:[0,1,2,3],welcom:0}})
\ No newline at end of file diff --git a/docs/_build/html/voluptuous.html b/docs/_build/html/voluptuous.html index e71f915..d19ded6 100644 --- a/docs/_build/html/voluptuous.html +++ b/docs/_build/html/voluptuous.html @@ -90,6 +90,13 @@ </dd></dl> <dl class="exception"> +<dt id="voluptuous.error.ContainsInvalid"> +<em class="property">exception </em><code class="descclassname">voluptuous.error.</code><code class="descname">ContainsInvalid</code><span class="sig-paren">(</span><em>message</em>, <em>path=None</em>, <em>error_message=None</em>, <em>error_type=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/error.html#ContainsInvalid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.error.ContainsInvalid" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#voluptuous.error.Invalid" title="voluptuous.error.Invalid"><code class="xref py py-class docutils literal"><span class="pre">voluptuous.error.Invalid</span></code></a></p> +<p>List does not contain item</p> +</dd></dl> + +<dl class="exception"> <dt id="voluptuous.error.DateInvalid"> <em class="property">exception </em><code class="descclassname">voluptuous.error.</code><code class="descname">DateInvalid</code><span class="sig-paren">(</span><em>message</em>, <em>path=None</em>, <em>error_message=None</em>, <em>error_type=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/error.html#DateInvalid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.error.DateInvalid" title="Permalink to this definition">¶</a></dt> <dd><p>Bases: <a class="reference internal" href="#voluptuous.error.Invalid" title="voluptuous.error.Invalid"><code class="xref py py-class docutils literal"><span class="pre">voluptuous.error.Invalid</span></code></a></p> @@ -254,6 +261,13 @@ string.</td> </dd></dl> <dl class="exception"> +<dt id="voluptuous.error.NotEnoughValid"> +<em class="property">exception </em><code class="descclassname">voluptuous.error.</code><code class="descname">NotEnoughValid</code><span class="sig-paren">(</span><em>message</em>, <em>path=None</em>, <em>error_message=None</em>, <em>error_type=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/error.html#NotEnoughValid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.error.NotEnoughValid" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#voluptuous.error.Invalid" title="voluptuous.error.Invalid"><code class="xref py py-class docutils literal"><span class="pre">voluptuous.error.Invalid</span></code></a></p> +<p>The value did not pass enough validations.</p> +</dd></dl> + +<dl class="exception"> <dt id="voluptuous.error.NotInInvalid"> <em class="property">exception </em><code class="descclassname">voluptuous.error.</code><code class="descname">NotInInvalid</code><span class="sig-paren">(</span><em>message</em>, <em>path=None</em>, <em>error_message=None</em>, <em>error_type=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/error.html#NotInInvalid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.error.NotInInvalid" title="Permalink to this definition">¶</a></dt> <dd><p>Bases: <a class="reference internal" href="#voluptuous.error.Invalid" title="voluptuous.error.Invalid"><code class="xref py py-class docutils literal"><span class="pre">voluptuous.error.Invalid</span></code></a></p> @@ -309,6 +323,13 @@ string.</td> </dd></dl> <dl class="exception"> +<dt id="voluptuous.error.TooManyValid"> +<em class="property">exception </em><code class="descclassname">voluptuous.error.</code><code class="descname">TooManyValid</code><span class="sig-paren">(</span><em>message</em>, <em>path=None</em>, <em>error_message=None</em>, <em>error_type=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/error.html#TooManyValid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.error.TooManyValid" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#voluptuous.error.Invalid" title="voluptuous.error.Invalid"><code class="xref py py-class docutils literal"><span class="pre">voluptuous.error.Invalid</span></code></a></p> +<p>The value passed more than expected validations.</p> +</dd></dl> + +<dl class="exception"> <dt id="voluptuous.error.TrueInvalid"> <em class="property">exception </em><code class="descclassname">voluptuous.error.</code><code class="descname">TrueInvalid</code><span class="sig-paren">(</span><em>message</em>, <em>path=None</em>, <em>error_message=None</em>, <em>error_type=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/error.html#TrueInvalid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.error.TrueInvalid" title="Permalink to this definition">¶</a></dt> <dd><p>Bases: <a class="reference internal" href="#voluptuous.error.Invalid" title="voluptuous.error.Invalid"><code class="xref py py-class docutils literal"><span class="pre">voluptuous.error.Invalid</span></code></a></p> @@ -357,7 +378,7 @@ and MultipleInvalid.__str__ only provides the first error.</p> <span id="voluptuous-schema-builder-module"></span><h2>voluptuous.schema_builder module<a class="headerlink" href="#module-voluptuous.schema_builder" title="Permalink to this headline">¶</a></h2> <dl class="class"> <dt id="voluptuous.schema_builder.Exclusive"> -<em class="property">class </em><code class="descclassname">voluptuous.schema_builder.</code><code class="descname">Exclusive</code><span class="sig-paren">(</span><em>schema</em>, <em>group_of_exclusion</em>, <em>msg=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/schema_builder.html#Exclusive"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.schema_builder.Exclusive" title="Permalink to this definition">¶</a></dt> +<em class="property">class </em><code class="descclassname">voluptuous.schema_builder.</code><code class="descname">Exclusive</code><span class="sig-paren">(</span><em>schema</em>, <em>group_of_exclusion</em>, <em>msg=None</em>, <em>description=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/schema_builder.html#Exclusive"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.schema_builder.Exclusive" title="Permalink to this definition">¶</a></dt> <dd><p>Bases: <a class="reference internal" href="#voluptuous.schema_builder.Optional" title="voluptuous.schema_builder.Optional"><code class="xref py py-class docutils literal"><span class="pre">voluptuous.schema_builder.Optional</span></code></a></p> <p>Mark a node in the schema as exclusive.</p> <p>Exclusive keys inherited from Optional:</p> @@ -406,7 +427,7 @@ and MultipleInvalid.__str__ only provides the first error.</p> <em class="property">class </em><code class="descclassname">voluptuous.schema_builder.</code><code class="descname">Inclusive</code><span class="sig-paren">(</span><em>schema</em>, <em>group_of_inclusion</em>, <em>msg=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/schema_builder.html#Inclusive"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.schema_builder.Inclusive" title="Permalink to this definition">¶</a></dt> <dd><p>Bases: <a class="reference internal" href="#voluptuous.schema_builder.Optional" title="voluptuous.schema_builder.Optional"><code class="xref py py-class docutils literal"><span class="pre">voluptuous.schema_builder.Optional</span></code></a></p> <p>Mark a node in the schema as inclusive.</p> -<p>Exclusive keys inherited from Optional:</p> +<p>Inclusive keys inherited from Optional:</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span> <span class="gp">... </span> <span class="n">Inclusive</span><span class="p">(</span><span class="s1">'filename'</span><span class="p">,</span> <span class="s1">'file'</span><span class="p">):</span> <span class="nb">str</span><span class="p">,</span> <span class="gp">... </span> <span class="n">Inclusive</span><span class="p">(</span><span class="s1">'mimetype'</span><span class="p">,</span> <span class="s1">'file'</span><span class="p">):</span> <span class="nb">str</span> @@ -451,7 +472,7 @@ and MultipleInvalid.__str__ only provides the first error.</p> <dl class="class"> <dt id="voluptuous.schema_builder.Marker"> -<em class="property">class </em><code class="descclassname">voluptuous.schema_builder.</code><code class="descname">Marker</code><span class="sig-paren">(</span><em>schema_</em>, <em>msg=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/schema_builder.html#Marker"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.schema_builder.Marker" title="Permalink to this definition">¶</a></dt> +<em class="property">class </em><code class="descclassname">voluptuous.schema_builder.</code><code class="descname">Marker</code><span class="sig-paren">(</span><em>schema_</em>, <em>msg=None</em>, <em>description=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/schema_builder.html#Marker"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.schema_builder.Marker" title="Permalink to this definition">¶</a></dt> <dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> <p>Mark nodes for special treatment.</p> </dd></dl> @@ -498,7 +519,7 @@ and MultipleInvalid.__str__ only provides the first error.</p> <dl class="class"> <dt id="voluptuous.schema_builder.Optional"> -<em class="property">class </em><code class="descclassname">voluptuous.schema_builder.</code><code class="descname">Optional</code><span class="sig-paren">(</span><em>schema</em>, <em>msg=None</em>, <em>default=...</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/schema_builder.html#Optional"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.schema_builder.Optional" title="Permalink to this definition">¶</a></dt> +<em class="property">class </em><code class="descclassname">voluptuous.schema_builder.</code><code class="descname">Optional</code><span class="sig-paren">(</span><em>schema</em>, <em>msg=None</em>, <em>default=...</em>, <em>description=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/schema_builder.html#Optional"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.schema_builder.Optional" title="Permalink to this definition">¶</a></dt> <dd><p>Bases: <a class="reference internal" href="#voluptuous.schema_builder.Marker" title="voluptuous.schema_builder.Marker"><code class="xref py py-class docutils literal"><span class="pre">voluptuous.schema_builder.Marker</span></code></a></p> <p>Mark a node in the schema as optional, and optionally provide a default</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="n">Optional</span><span class="p">(</span><span class="s1">'key'</span><span class="p">):</span> <span class="nb">str</span><span class="p">})</span> @@ -525,7 +546,7 @@ and MultipleInvalid.__str__ only provides the first error.</p> <dl class="class"> <dt id="voluptuous.schema_builder.Remove"> -<em class="property">class </em><code class="descclassname">voluptuous.schema_builder.</code><code class="descname">Remove</code><span class="sig-paren">(</span><em>schema_</em>, <em>msg=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/schema_builder.html#Remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.schema_builder.Remove" title="Permalink to this definition">¶</a></dt> +<em class="property">class </em><code class="descclassname">voluptuous.schema_builder.</code><code class="descname">Remove</code><span class="sig-paren">(</span><em>schema_</em>, <em>msg=None</em>, <em>description=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/schema_builder.html#Remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.schema_builder.Remove" title="Permalink to this definition">¶</a></dt> <dd><p>Bases: <a class="reference internal" href="#voluptuous.schema_builder.Marker" title="voluptuous.schema_builder.Marker"><code class="xref py py-class docutils literal"><span class="pre">voluptuous.schema_builder.Marker</span></code></a></p> <p>Mark a node in the schema to be removed and excluded from the validated output. Keys that fail validation will not raise <code class="docutils literal"><span class="pre">Invalid</span></code>. Instead, these @@ -544,7 +565,7 @@ keys will be treated as extras.</p> <dl class="class"> <dt id="voluptuous.schema_builder.Required"> -<em class="property">class </em><code class="descclassname">voluptuous.schema_builder.</code><code class="descname">Required</code><span class="sig-paren">(</span><em>schema</em>, <em>msg=None</em>, <em>default=...</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/schema_builder.html#Required"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.schema_builder.Required" title="Permalink to this definition">¶</a></dt> +<em class="property">class </em><code class="descclassname">voluptuous.schema_builder.</code><code class="descname">Required</code><span class="sig-paren">(</span><em>schema</em>, <em>msg=None</em>, <em>default=...</em>, <em>description=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/schema_builder.html#Required"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.schema_builder.Required" title="Permalink to this definition">¶</a></dt> <dd><p>Bases: <a class="reference internal" href="#voluptuous.schema_builder.Marker" title="voluptuous.schema_builder.Marker"><code class="xref py py-class docutils literal"><span class="pre">voluptuous.schema_builder.Marker</span></code></a></p> <p>Mark a node in the schema as being required, and optionally provide a default value.</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">schema</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">({</span><span class="n">Required</span><span class="p">(</span><span class="s1">'key'</span><span class="p">):</span> <span class="nb">str</span><span class="p">})</span> @@ -604,8 +625,46 @@ this, unless overridden.</p> </table> </dd></dl> +<dl class="classmethod"> +<dt id="voluptuous.schema_builder.Schema.infer"> +<em class="property">classmethod </em><code class="descname">infer</code><span class="sig-paren">(</span><em>data</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/schema_builder.html#Schema.infer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.schema_builder.Schema.infer" title="Permalink to this definition">¶</a></dt> +<dd><p>Create a Schema from concrete data (e.g. an API response).</p> +<p>For example, this will take a dict like:</p> +<dl class="docutils"> +<dt>{</dt> +<dd><p class="first">‘foo’: 1, +‘bar’: {</p> +<blockquote> +<div>‘a’: True, +‘b’: False</div></blockquote> +<p class="last">}, +‘baz’: [‘purple’, ‘monkey’, ‘dishwasher’]</p> +</dd> +</dl> +<p>}</p> +<p>And return a Schema:</p> +<dl class="docutils"> +<dt>{</dt> +<dd><p class="first">‘foo’: int, +‘bar’: {</p> +<blockquote> +<div>‘a’: bool, +‘b’: bool</div></blockquote> +<p class="last">}, +‘baz’: [str]</p> +</dd> +</dl> +<p>}</p> +<p>Note: only very basic inference is supported.</p> </dd></dl> +</dd></dl> + +<dl class="function"> +<dt id="voluptuous.schema_builder.Self"> +<code class="descclassname">voluptuous.schema_builder.</code><code class="descname">Self</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/schema_builder.html#Self"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.schema_builder.Self" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + <dl class="class"> <dt id="voluptuous.schema_builder.Undefined"> <em class="property">class </em><code class="descclassname">voluptuous.schema_builder.</code><code class="descname">Undefined</code><a class="reference internal" href="_modules/voluptuous/schema_builder.html#Undefined"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.schema_builder.Undefined" title="Permalink to this definition">¶</a></dt> @@ -799,11 +858,6 @@ this, unless overridden.</p> </dd></dl> <dl class="function"> -<dt id="voluptuous.util.to_utf8_py2"> -<code class="descclassname">voluptuous.util.</code><code class="descname">to_utf8_py2</code><span class="sig-paren">(</span><em>data</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/util.html#to_utf8_py2"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.util.to_utf8_py2" title="Permalink to this definition">¶</a></dt> -<dd></dd></dl> - -<dl class="function"> <dt id="voluptuous.util.u"> <code class="descclassname">voluptuous.util.</code><code class="descname">u</code><span class="sig-paren">(</span><em>x</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/util.html#u"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.util.u" title="Permalink to this definition">¶</a></dt> <dd></dd></dl> @@ -814,7 +868,7 @@ this, unless overridden.</p> <dl class="class"> <dt id="voluptuous.validators.All"> <em class="property">class </em><code class="descclassname">voluptuous.validators.</code><code class="descname">All</code><span class="sig-paren">(</span><em>*validators</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/validators.html#All"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.validators.All" title="Permalink to this definition">¶</a></dt> -<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">voluptuous.validators._WithSubValidators</span></code></p> <p>Value must pass all validators.</p> <p>The output of each validator is passed as input to the next.</p> <table class="docutils field-list" frame="void" rules="none"> @@ -845,7 +899,7 @@ this, unless overridden.</p> <dl class="class"> <dt id="voluptuous.validators.Any"> <em class="property">class </em><code class="descclassname">voluptuous.validators.</code><code class="descname">Any</code><span class="sig-paren">(</span><em>*validators</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/validators.html#Any"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.validators.Any" title="Permalink to this definition">¶</a></dt> -<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">voluptuous.validators._WithSubValidators</span></code></p> <p>Use the first validated value.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> @@ -946,6 +1000,20 @@ will be marked as Invalid.</p> </dd></dl> <dl class="class"> +<dt id="voluptuous.validators.Contains"> +<em class="property">class </em><code class="descclassname">voluptuous.validators.</code><code class="descname">Contains</code><span class="sig-paren">(</span><em>item</em>, <em>msg=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/validators.html#Contains"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.validators.Contains" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>Validate that the given schema element is in the sequence being validated.</p> +<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">s</span> <span class="o">=</span> <span class="n">Contains</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> +<span class="gp">>>> </span><span class="n">s</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span> +<span class="go">[3, 2, 1]</span> +<span class="gp">>>> </span><span class="k">with</span> <span class="n">raises</span><span class="p">(</span><span class="n">ContainsInvalid</span><span class="p">,</span> <span class="s1">'value is not allowed'</span><span class="p">):</span> +<span class="gp">... </span> <span class="n">s</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span> +</pre></div> +</div> +</dd></dl> + +<dl class="class"> <dt id="voluptuous.validators.Date"> <em class="property">class </em><code class="descclassname">voluptuous.validators.</code><code class="descname">Date</code><span class="sig-paren">(</span><em>format=None</em>, <em>msg=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/validators.html#Date"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.validators.Date" title="Permalink to this definition">¶</a></dt> <dd><p>Bases: <a class="reference internal" href="#voluptuous.validators.Datetime" title="voluptuous.validators.Datetime"><code class="xref py py-class docutils literal"><span class="pre">voluptuous.validators.Datetime</span></code></a></p> @@ -955,11 +1023,6 @@ will be marked as Invalid.</p> <code class="descname">DEFAULT_FORMAT</code><em class="property"> = '%Y-%m-%d'</em><a class="headerlink" href="#voluptuous.validators.Date.DEFAULT_FORMAT" title="Permalink to this definition">¶</a></dt> <dd></dd></dl> -<dl class="attribute"> -<dt id="voluptuous.validators.Date.FORMAT_DESCRIPTION"> -<code class="descname">FORMAT_DESCRIPTION</code><em class="property"> = 'yyyy-mm-dd'</em><a class="headerlink" href="#voluptuous.validators.Date.FORMAT_DESCRIPTION" title="Permalink to this definition">¶</a></dt> -<dd></dd></dl> - </dd></dl> <dl class="class"> @@ -1163,6 +1226,28 @@ lists, dictionaries, etc. are treated as “false”:</p> </div> </dd></dl> +<dl class="function"> +<dt id="voluptuous.validators.Maybe"> +<code class="descclassname">voluptuous.validators.</code><code class="descname">Maybe</code><span class="sig-paren">(</span><em>validator</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/validators.html#Maybe"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.validators.Maybe" title="Permalink to this definition">¶</a></dt> +<dd><p>Validate that the object matches given validator or is None.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Raises:</th><td class="field-body"><strong>Invalid</strong> – if the value does not match the given validator and is not +None</td> +</tr> +</tbody> +</table> +<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">s</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="n">Maybe</span><span class="p">(</span><span class="nb">int</span><span class="p">))</span> +<span class="gp">>>> </span><span class="n">s</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> +<span class="go">10</span> +<span class="gp">>>> </span><span class="k">with</span> <span class="n">raises</span><span class="p">(</span><span class="n">Invalid</span><span class="p">):</span> +<span class="gp">... </span> <span class="n">s</span><span class="p">(</span><span class="s2">"string"</span><span class="p">)</span> +</pre></div> +</div> +</dd></dl> + <dl class="class"> <dt id="voluptuous.validators.NotIn"> <em class="property">class </em><code class="descclassname">voluptuous.validators.</code><code class="descname">NotIn</code><span class="sig-paren">(</span><em>container</em>, <em>msg=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/validators.html#NotIn"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.validators.NotIn" title="Permalink to this definition">¶</a></dt> @@ -1258,6 +1343,45 @@ Either min or max can be excluded from the range of accepted values.</p> </dd></dl> <dl class="class"> +<dt id="voluptuous.validators.SomeOf"> +<em class="property">class </em><code class="descclassname">voluptuous.validators.</code><code class="descname">SomeOf</code><span class="sig-paren">(</span><em>validators</em>, <em>min_valid=None</em>, <em>max_valid=None</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/validators.html#SomeOf"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.validators.SomeOf" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">voluptuous.validators._WithSubValidators</span></code></p> +<p>Value must pass at least some validations, determined by the given parameter. +Optionally, number of passed validations can be capped.</p> +<p>The output of each validator is passed as input to the next.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>min_valid</strong> – Minimum number of valid schemas.</li> +<li><strong>validators</strong> – a list of schemas or validators to match input against</li> +<li><strong>max_valid</strong> – Maximum number of valid schemas.</li> +<li><strong>msg</strong> – Message to deliver to user if validation fails.</li> +<li><strong>kwargs</strong> – All other keyword arguments are passed to the sub-Schema constructors.</li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Raises:</th><td class="field-body"><ul class="first last simple"> +<li><strong>NotEnoughValid</strong> – if the minimum number of validations isn’t met</li> +<li><strong>TooManyValid</strong> – if the more validations than the given amount is met</li> +</ul> +</td> +</tr> +</tbody> +</table> +<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">validate</span> <span class="o">=</span> <span class="n">Schema</span><span class="p">(</span><span class="n">SomeOf</span><span class="p">(</span><span class="n">min_valid</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">validators</span><span class="o">=</span><span class="p">[</span><span class="n">Range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span> <span class="n">Any</span><span class="p">(</span><span class="nb">float</span><span class="p">,</span> <span class="nb">int</span><span class="p">),</span> <span class="mf">6.6</span><span class="p">]))</span> +<span class="gp">>>> </span><span class="n">validate</span><span class="p">(</span><span class="mf">6.6</span><span class="p">)</span> +<span class="go">6.6</span> +<span class="gp">>>> </span><span class="n">validate</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> +<span class="go">3</span> +<span class="gp">>>> </span><span class="k">with</span> <span class="n">raises</span><span class="p">(</span><span class="n">MultipleInvalid</span><span class="p">,</span> <span class="s1">'value must be at most 5, not a valid value'</span><span class="p">):</span> +<span class="gp">... </span> <span class="n">validate</span><span class="p">(</span><span class="mf">6.2</span><span class="p">)</span> +</pre></div> +</div> +</dd></dl> + +<dl class="class"> <dt id="voluptuous.validators.Unique"> <em class="property">class </em><code class="descclassname">voluptuous.validators.</code><code class="descname">Unique</code><span class="sig-paren">(</span><em>msg=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/validators.html#Unique"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.validators.Unique" title="Permalink to this definition">¶</a></dt> <dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> diff --git a/docs/_build/html/voluptuous.tests.html b/docs/_build/html/voluptuous.tests.html index 325862a..7567576 100644 --- a/docs/_build/html/voluptuous.tests.html +++ b/docs/_build/html/voluptuous.tests.html @@ -49,6 +49,64 @@ <div class="section" id="module-voluptuous.tests.tests"> <span id="voluptuous-tests-tests-module"></span><h2>voluptuous.tests.tests module<a class="headerlink" href="#module-voluptuous.tests.tests" title="Permalink to this headline">¶</a></h2> <dl class="function"> +<dt id="voluptuous.tests.tests.test_IsDir"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_IsDir</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_IsDir"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_IsDir" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_IsFile"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_IsFile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_IsFile"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_IsFile" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_PathExists"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_PathExists</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_PathExists"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_PathExists" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_SomeOf_max_validation"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_SomeOf_max_validation</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_SomeOf_max_validation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_SomeOf_max_validation" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_SomeOf_min_validation"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_SomeOf_min_validation</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_SomeOf_min_validation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_SomeOf_min_validation" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_SomeOf_on_bounds_assertion"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_SomeOf_on_bounds_assertion</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_SomeOf_on_bounds_assertion"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_SomeOf_on_bounds_assertion" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_all_error_has_path"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_all_error_has_path</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_all_error_has_path"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_all_error_has_path" title="Permalink to this definition">¶</a></dt> +<dd><p><a class="reference external" href="https://github.com/alecthomas/voluptuous/issues/347">https://github.com/alecthomas/voluptuous/issues/347</a></p> +</dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_any_error_has_path"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_any_error_has_path</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_any_error_has_path"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_any_error_has_path" title="Permalink to this definition">¶</a></dt> +<dd><p><a class="reference external" href="https://github.com/alecthomas/voluptuous/issues/347">https://github.com/alecthomas/voluptuous/issues/347</a></p> +</dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_class"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_class</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_class"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_class" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_comparing_voluptuous_object_to_str"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_comparing_voluptuous_object_to_str</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_comparing_voluptuous_object_to_str"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_comparing_voluptuous_object_to_str" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_contains"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_contains</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_contains"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_contains" title="Permalink to this definition">¶</a></dt> +<dd><p>Verify contains validation method.</p> +</dd></dl> + +<dl class="function"> <dt id="voluptuous.tests.tests.test_copy_dict_undefined"> <code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_copy_dict_undefined</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_copy_dict_undefined"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_copy_dict_undefined" title="Permalink to this definition">¶</a></dt> <dd><p>test with a copied dictionary</p> @@ -60,11 +118,21 @@ <dd></dd></dl> <dl class="function"> +<dt id="voluptuous.tests.tests.test_date_custom_format"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_date_custom_format</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_date_custom_format"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_date_custom_format" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> <dt id="voluptuous.tests.tests.test_datetime"> <code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_datetime</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_datetime"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_datetime" title="Permalink to this definition">¶</a></dt> <dd></dd></dl> <dl class="function"> +<dt id="voluptuous.tests.tests.test_description"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_description</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_description"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_description" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> <dt id="voluptuous.tests.tests.test_email_validation"> <code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_email_validation</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_email_validation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_email_validation" title="Permalink to this definition">¶</a></dt> <dd><p>test with valid email</p> @@ -89,11 +157,6 @@ </dd></dl> <dl class="function"> -<dt id="voluptuous.tests.tests.test_empty_dict_as_exact"> -<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_empty_dict_as_exact</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_empty_dict_as_exact"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_empty_dict_as_exact" title="Permalink to this definition">¶</a></dt> -<dd></dd></dl> - -<dl class="function"> <dt id="voluptuous.tests.tests.test_empty_list_as_exact"> <code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_empty_list_as_exact</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_empty_list_as_exact"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_empty_list_as_exact" title="Permalink to this definition">¶</a></dt> <dd></dd></dl> @@ -104,6 +167,17 @@ <dd></dd></dl> <dl class="function"> +<dt id="voluptuous.tests.tests.test_equality"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_equality</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_equality"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_equality" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_equality_negative"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_equality_negative</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_equality_negative"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_equality_negative" title="Permalink to this definition">¶</a></dt> +<dd><p>Verify that Schema objects are not equal to string representations</p> +</dd></dl> + +<dl class="function"> <dt id="voluptuous.tests.tests.test_exact_sequence"> <code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_exact_sequence</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_exact_sequence"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_exact_sequence" title="Permalink to this definition">¶</a></dt> <dd></dd></dl> @@ -155,6 +229,16 @@ </dd></dl> <dl class="function"> +<dt id="voluptuous.tests.tests.test_frozenset_of_integers"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_frozenset_of_integers</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_frozenset_of_integers"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_frozenset_of_integers" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_frozenset_of_integers_and_strings"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_frozenset_of_integers_and_strings</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_frozenset_of_integers_and_strings"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_frozenset_of_integers_and_strings" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> <dt id="voluptuous.tests.tests.test_humanize_error"> <code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_humanize_error</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_humanize_error"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_humanize_error" title="Permalink to this definition">¶</a></dt> <dd></dd></dl> @@ -166,6 +250,16 @@ </dd></dl> <dl class="function"> +<dt id="voluptuous.tests.tests.test_inequality"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_inequality</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_inequality"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_inequality" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_inequality_negative"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_inequality_negative</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_inequality_negative"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_inequality_negative" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> <dt id="voluptuous.tests.tests.test_iterate_candidates"> <code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_iterate_candidates</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_iterate_candidates"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_iterate_candidates" title="Permalink to this definition">¶</a></dt> <dd><p>Verify that the order for iterating over mapping candidates is right.</p> @@ -184,6 +278,23 @@ </dd></dl> <dl class="function"> +<dt id="voluptuous.tests.tests.test_marker_hashable"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_marker_hashable</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_marker_hashable"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_marker_hashable" title="Permalink to this definition">¶</a></dt> +<dd><p>Verify that you can get schema keys, even if markers were used</p> +</dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_match_error_has_path"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_match_error_has_path</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_match_error_has_path"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_match_error_has_path" title="Permalink to this definition">¶</a></dt> +<dd><p><a class="reference external" href="https://github.com/alecthomas/voluptuous/issues/347">https://github.com/alecthomas/voluptuous/issues/347</a></p> +</dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_maybe"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_maybe</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_maybe"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_maybe" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> <dt id="voluptuous.tests.tests.test_named_tuples_validate_as_tuples"> <code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_named_tuples_validate_as_tuples</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_named_tuples_validate_as_tuples"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_named_tuples_validate_as_tuples" title="Permalink to this definition">¶</a></dt> <dd></dd></dl> @@ -261,6 +372,11 @@ </dd></dl> <dl class="function"> +<dt id="voluptuous.tests.tests.test_ordered_dict"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_ordered_dict</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_ordered_dict"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_ordered_dict" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> <dt id="voluptuous.tests.tests.test_range_exlcudes_nan"> <code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_range_exlcudes_nan</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_range_exlcudes_nan"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_range_exlcudes_nan" title="Permalink to this definition">¶</a></dt> <dd></dd></dl> @@ -304,6 +420,26 @@ <dd></dd></dl> <dl class="function"> +<dt id="voluptuous.tests.tests.test_schema_decorator_partial_match_called_with_args"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_schema_decorator_partial_match_called_with_args</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_schema_decorator_partial_match_called_with_args"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_schema_decorator_partial_match_called_with_args" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_schema_decorator_partial_match_called_with_kwargs"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_schema_decorator_partial_match_called_with_kwargs</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_schema_decorator_partial_match_called_with_kwargs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_schema_decorator_partial_match_called_with_kwargs" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_schema_decorator_partial_unmatch_called_with_args"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_schema_decorator_partial_unmatch_called_with_args</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_schema_decorator_partial_unmatch_called_with_args"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_schema_decorator_partial_unmatch_called_with_args" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_schema_decorator_partial_unmatch_called_with_kwargs"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_schema_decorator_partial_unmatch_called_with_kwargs</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_schema_decorator_partial_unmatch_called_with_kwargs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_schema_decorator_partial_unmatch_called_with_kwargs" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> <dt id="voluptuous.tests.tests.test_schema_decorator_return_only_match"> <code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_schema_decorator_return_only_match</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_schema_decorator_return_only_match"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_schema_decorator_return_only_match" title="Permalink to this definition">¶</a></dt> <dd></dd></dl> @@ -352,6 +488,56 @@ </dd></dl> <dl class="function"> +<dt id="voluptuous.tests.tests.test_schema_infer"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_schema_infer</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_schema_infer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_schema_infer" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_schema_infer_accepts_kwargs"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_schema_infer_accepts_kwargs</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_schema_infer_accepts_kwargs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_schema_infer_accepts_kwargs" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_schema_infer_dict"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_schema_infer_dict</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_schema_infer_dict"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_schema_infer_dict" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_schema_infer_list"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_schema_infer_list</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_schema_infer_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_schema_infer_list" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_schema_infer_scalar"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_schema_infer_scalar</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_schema_infer_scalar"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_schema_infer_scalar" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_self_all"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_self_all</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_self_all"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_self_all" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_self_any"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_self_any</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_self_any"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_self_any" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_self_validation"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_self_validation</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_self_validation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_self_validation" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_set_of_integers"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_set_of_integers</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_set_of_integers"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_set_of_integers" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> +<dt id="voluptuous.tests.tests.test_set_of_integers_and_strings"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_set_of_integers_and_strings</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_set_of_integers_and_strings"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_set_of_integers_and_strings" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="function"> <dt id="voluptuous.tests.tests.test_sorting"> <code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_sorting</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_sorting"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_sorting" title="Permalink to this definition">¶</a></dt> <dd><p>Expect alphabetic sorting</p> @@ -364,19 +550,8 @@ </dd></dl> <dl class="function"> -<dt id="voluptuous.tests.tests.test_to_utf8"> -<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_to_utf8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_to_utf8"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_to_utf8" title="Permalink to this definition">¶</a></dt> -<dd></dd></dl> - -<dl class="function"> -<dt id="voluptuous.tests.tests.test_unicode_key_is_converted_to_utf8_when_in_marker"> -<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_unicode_key_is_converted_to_utf8_when_in_marker</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_unicode_key_is_converted_to_utf8_when_in_marker"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_unicode_key_is_converted_to_utf8_when_in_marker" title="Permalink to this definition">¶</a></dt> -<dd><p>Verify that when using unicode key the ‘u’ prefix is not thrown in the exception</p> -</dd></dl> - -<dl class="function"> -<dt id="voluptuous.tests.tests.test_unicode_key_is_converted_to_utf8_when_plain_text"> -<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_unicode_key_is_converted_to_utf8_when_plain_text</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_unicode_key_is_converted_to_utf8_when_plain_text"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_unicode_key_is_converted_to_utf8_when_plain_text" title="Permalink to this definition">¶</a></dt> +<dt id="voluptuous.tests.tests.test_unicode_as_key"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_unicode_as_key</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_unicode_as_key"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_unicode_as_key" title="Permalink to this definition">¶</a></dt> <dd></dd></dl> <dl class="function"> @@ -408,6 +583,15 @@ <dd><p>test with empty host URL</p> </dd></dl> +<dl class="function"> +<dt id="voluptuous.tests.tests.test_validation_performance"> +<code class="descclassname">voluptuous.tests.tests.</code><code class="descname">test_validation_performance</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/voluptuous/tests/tests.html#test_validation_performance"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#voluptuous.tests.tests.test_validation_performance" title="Permalink to this definition">¶</a></dt> +<dd><p>This test comes to make sure the validation complexity of dictionaries is done in a linear time. +to achieve this a custom marker is used in the scheme that counts each time it is evaluated. +By doing so we can determine if the validation is done in linear complexity. +Prior to issue <a class="reference external" href="https://github.com/alecthomas/voluptuous/issues/259">https://github.com/alecthomas/voluptuous/issues/259</a> this was exponential</p> +</dd></dl> + </div> <div class="section" id="module-voluptuous.tests"> <span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-voluptuous.tests" title="Permalink to this headline">¶</a></h2> |
