Skip to content

Commit 2aadd25

Browse files
author
committed
Deployed b1e6533 with MkDocs version: 1.6.1
1 parent da25911 commit 2aadd25

5 files changed

Lines changed: 36 additions & 24 deletions

File tree

errors/index.html

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,10 +1066,18 @@ <h2 id="missingdecodererror"><code>MissingDecoderError</code><a class="headerlin
10661066
<li><code>model: type</code> — the <code>response_model=</code> value that wasn't claimed.</li>
10671067
<li><code>registered_names: tuple[str, ...]</code> — class names of the registered decoders that all rejected the model. Empty tuple means no decoders were registered.</li>
10681068
</ul>
1069-
<p>Corrective action depends on the message hint:</p>
1069+
<p>The message reads <code>no decoder for response_model=&lt;Model&gt;: &lt;hint&gt;</code>, and the corrective action depends on the hint. The two hints, verbatim:</p>
10701070
<ul>
1071-
<li><code>no decoders registered. Install pip install httpware[pydantic] or pip install httpware[msgspec], or pass decoders=[...] explicitly.</code> — install an extra or pass an explicit decoder list.</li>
1072-
<li><code>registered decoders (PydanticDecoder + MsgspecDecoder) all rejected it.</code> — your <code>response_model</code> type is exotic enough that neither built-in claims it. Pass a custom <code>ResponseDecoder</code> via <code>decoders=[...]</code>.</li>
1071+
<li>
1072+
<p><strong>No decoders were registered</strong> — install an extra or pass an explicit decoder list:</p>
1073+
<div class="highlight"><pre><span></span><code>no decoders registered. Install `pip install httpware[pydantic]` or `pip install httpware[msgspec]`, or pass decoders=[...] explicitly.
1074+
</code></pre></div>
1075+
</li>
1076+
<li>
1077+
<p><strong>Registered decoders all rejected the model</strong> — your <code>response_model</code> type is exotic enough that neither built-in claims it; pass a custom <code>ResponseDecoder</code> via <code>decoders=[...]</code>:</p>
1078+
<div class="highlight"><pre><span></span><code>registered decoders (PydanticDecoder + MsgspecDecoder) all rejected it. Pass a custom decoder via decoders=[...].
1079+
</code></pre></div>
1080+
</li>
10731081
</ul>
10741082
<p>Unlike <code>DecodeError</code>, this error fires <em>before</em> the HTTP request — no traffic is sent.</p>
10751083
<h2 id="see-also">See also<a class="headerlink" href="#see-also" title="Permanent link">&para;</a></h2>

index.html

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -976,17 +976,21 @@ <h3 id="decoder-dispatch">Decoder dispatch<a class="headerlink" href="#decoder-d
976976
the first decoder whose <code>can_decode(model)</code> returns <code>True</code>. Both built-in
977977
decoders claim broadly within their library; the ordering encodes your
978978
preference for shared shapes (<code>dict</code>, <code>list[Foo]</code>, dataclasses, primitives):</p>
979-
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="c1"># pydantic-first (the default when both extras are installed):</span>
980-
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="c1"># - BaseModel -&gt; pydantic</span>
981-
<a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="c1"># - Struct -&gt; msgspec</span>
982-
<a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a><span class="c1"># - dict, list -&gt; pydantic (first in list)</span>
983-
<a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a><span class="n">AsyncClient</span><span class="p">(</span><span class="n">decoders</span><span class="o">=</span><span class="p">[</span><span class="n">PydanticDecoder</span><span class="p">(),</span> <span class="n">MsgspecDecoder</span><span class="p">()])</span>
984-
<a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a>
985-
<a id="__codelineno-5-7" name="__codelineno-5-7" href="#__codelineno-5-7"></a><span class="c1"># msgspec-first — same native routing, but shared shapes go to msgspec:</span>
986-
<a id="__codelineno-5-8" name="__codelineno-5-8" href="#__codelineno-5-8"></a><span class="c1"># - BaseModel -&gt; pydantic</span>
987-
<a id="__codelineno-5-9" name="__codelineno-5-9" href="#__codelineno-5-9"></a><span class="c1"># - Struct -&gt; msgspec</span>
988-
<a id="__codelineno-5-10" name="__codelineno-5-10" href="#__codelineno-5-10"></a><span class="c1"># - dict, list -&gt; msgspec</span>
989-
<a id="__codelineno-5-11" name="__codelineno-5-11" href="#__codelineno-5-11"></a><span class="n">AsyncClient</span><span class="p">(</span><span class="n">decoders</span><span class="o">=</span><span class="p">[</span><span class="n">MsgspecDecoder</span><span class="p">(),</span> <span class="n">PydanticDecoder</span><span class="p">()])</span>
979+
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="kn">from</span><span class="w"> </span><span class="nn">httpware</span><span class="w"> </span><span class="kn">import</span> <span class="n">AsyncClient</span>
980+
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="kn">from</span><span class="w"> </span><span class="nn">httpware.decoders.msgspec</span><span class="w"> </span><span class="kn">import</span> <span class="n">MsgspecDecoder</span>
981+
<a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="kn">from</span><span class="w"> </span><span class="nn">httpware.decoders.pydantic</span><span class="w"> </span><span class="kn">import</span> <span class="n">PydanticDecoder</span>
982+
<a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a>
983+
<a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a><span class="c1"># pydantic-first (the default when both extras are installed):</span>
984+
<a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a><span class="c1"># - BaseModel -&gt; pydantic</span>
985+
<a id="__codelineno-5-7" name="__codelineno-5-7" href="#__codelineno-5-7"></a><span class="c1"># - Struct -&gt; msgspec</span>
986+
<a id="__codelineno-5-8" name="__codelineno-5-8" href="#__codelineno-5-8"></a><span class="c1"># - dict, list -&gt; pydantic (first in list)</span>
987+
<a id="__codelineno-5-9" name="__codelineno-5-9" href="#__codelineno-5-9"></a><span class="n">AsyncClient</span><span class="p">(</span><span class="n">decoders</span><span class="o">=</span><span class="p">[</span><span class="n">PydanticDecoder</span><span class="p">(),</span> <span class="n">MsgspecDecoder</span><span class="p">()])</span>
988+
<a id="__codelineno-5-10" name="__codelineno-5-10" href="#__codelineno-5-10"></a>
989+
<a id="__codelineno-5-11" name="__codelineno-5-11" href="#__codelineno-5-11"></a><span class="c1"># msgspec-first — same native routing, but shared shapes go to msgspec:</span>
990+
<a id="__codelineno-5-12" name="__codelineno-5-12" href="#__codelineno-5-12"></a><span class="c1"># - BaseModel -&gt; pydantic</span>
991+
<a id="__codelineno-5-13" name="__codelineno-5-13" href="#__codelineno-5-13"></a><span class="c1"># - Struct -&gt; msgspec</span>
992+
<a id="__codelineno-5-14" name="__codelineno-5-14" href="#__codelineno-5-14"></a><span class="c1"># - dict, list -&gt; msgspec</span>
993+
<a id="__codelineno-5-15" name="__codelineno-5-15" href="#__codelineno-5-15"></a><span class="n">AsyncClient</span><span class="p">(</span><span class="n">decoders</span><span class="o">=</span><span class="p">[</span><span class="n">MsgspecDecoder</span><span class="p">(),</span> <span class="n">PydanticDecoder</span><span class="p">()])</span>
990994
</code></pre></div>
991995
<p>If no registered decoder claims your <code>response_model</code>, the call raises
992996
<code>MissingDecoderError</code> <em>before</em> the HTTP request — see the

search/search_index.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

sitemap.xml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,38 @@
22
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
33
<url>
44
<loc>https://httpware.modern-python.org/</loc>
5-
<lastmod>2026-06-10</lastmod>
5+
<lastmod>2026-06-13</lastmod>
66
</url>
77
<url>
88
<loc>https://httpware.modern-python.org/errors/</loc>
9-
<lastmod>2026-06-10</lastmod>
9+
<lastmod>2026-06-13</lastmod>
1010
</url>
1111
<url>
1212
<loc>https://httpware.modern-python.org/middleware/</loc>
13-
<lastmod>2026-06-10</lastmod>
13+
<lastmod>2026-06-13</lastmod>
1414
</url>
1515
<url>
1616
<loc>https://httpware.modern-python.org/resilience/</loc>
17-
<lastmod>2026-06-10</lastmod>
17+
<lastmod>2026-06-13</lastmod>
1818
</url>
1919
<url>
2020
<loc>https://httpware.modern-python.org/testing/</loc>
21-
<lastmod>2026-06-10</lastmod>
21+
<lastmod>2026-06-13</lastmod>
2222
</url>
2323
<url>
2424
<loc>https://httpware.modern-python.org/dev/contributing/</loc>
25-
<lastmod>2026-06-10</lastmod>
25+
<lastmod>2026-06-13</lastmod>
2626
</url>
2727
<url>
2828
<loc>https://httpware.modern-python.org/recipes/link-header-pagination/</loc>
29-
<lastmod>2026-06-10</lastmod>
29+
<lastmod>2026-06-13</lastmod>
3030
</url>
3131
<url>
3232
<loc>https://httpware.modern-python.org/recipes/modern-di/</loc>
33-
<lastmod>2026-06-10</lastmod>
33+
<lastmod>2026-06-13</lastmod>
3434
</url>
3535
<url>
3636
<loc>https://httpware.modern-python.org/recipes/phase-decorator-patterns/</loc>
37-
<lastmod>2026-06-10</lastmod>
37+
<lastmod>2026-06-13</lastmod>
3838
</url>
3939
</urlset>

sitemap.xml.gz

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)