Compare commits

...

2 commits

Author SHA1 Message Date
Boris Baldassari 8a293f3212 Update comments and tests. 2024-03-06 21:50:07 +01:00
Boris Baldassari 2274a79ebf Update docs -- for code only now. 2024-03-06 21:26:06 +01:00
13 changed files with 179 additions and 2758 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -16,14 +16,7 @@
<nav class="pdoc">
<label id="navtoggle" for="togglestate" class="pdoc-button"><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke-linecap='round' stroke="currentColor" stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg></label>
<input id="togglestate" type="checkbox" aria-hidden="true" tabindex="-1">
<div> <a class="pdoc-button module-list-button" href="index.html">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-in-left" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M10 3.5a.5.5 0 0 0-.5-.5h-8a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 1 1 0v2A1.5 1.5 0 0 1 9.5 14h-8A1.5 1.5 0 0 1 0 12.5v-9A1.5 1.5 0 0 1 1.5 2h8A1.5 1.5 0 0 1 11 3.5v2a.5.5 0 0 1-1 0v-2z"/>
<path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
</svg> &nbsp;
Module Index
</a>
<div>
<input type="search" placeholder="Search..." role="searchbox" aria-label="search"
pattern=".+" required>

View file

@ -119,54 +119,60 @@
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a><span class="k">def</span> <span class="nf">log_request</span><span class="p">(</span><span class="n">addr</span><span class="p">:</span> <span class="nb">tuple</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="n">req</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">dict</span><span class="p">]):</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a><span class="sd"> Logs a request message to stdout, with a timestamp and an address (host:port).</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a><span class="sd"> </span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a><span class="sd"> Output is: `timestamp - host:port - message`.</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a><span class="sd"> </span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a><span class="sd"> Parameters</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a><span class="sd"> ----------</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a><span class="sd"> - addr: tuple[str, int]</span>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a><span class="sd"> The address to print, as a tuple (host, port)</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a><span class="sd"> - req: dict[str, dict]</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a><span class="sd"> The request to print.</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="k">assert</span> <span class="s1">&#39;head&#39;</span> <span class="ow">in</span> <span class="n">req</span> \
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="ow">and</span> <span class="s1">&#39;verb&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="s1">&#39;resource&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">verb</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;verb&#39;</span><span class="p">]</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">res</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;resource&#39;</span><span class="p">]</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">verb</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">res</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="k">if</span> <span class="s1">&#39;params&#39;</span> <span class="ow">in</span> <span class="n">req</span> <span class="ow">and</span> <span class="s1">&#39;User-Agent&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">]:</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="n">msg</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; - </span><span class="si">{</span><span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">][</span><span class="s1">&#39;User-Agent&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a><span class="sd"> If the User-Agent header is passed, its value is appended at the end.</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a><span class="sd"> </span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a><span class="sd"> Output is: `timestamp - host:port - verb resource`.</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a><span class="sd"> Output with User-Agent is: `timestamp - host:port - verb resource - user_agent`.</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a><span class="sd"> Parameters</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a><span class="sd"> ----------</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a><span class="sd"> - addr: tuple[str, int]</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a><span class="sd"> The address to print, as a tuple (host, port)</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a><span class="sd"> - req: dict[str, dict]</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a><span class="sd"> The request to print.</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="k">assert</span> <span class="s1">&#39;head&#39;</span> <span class="ow">in</span> <span class="n">req</span> \
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="ow">and</span> <span class="s1">&#39;verb&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="s1">&#39;resource&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">verb</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;verb&#39;</span><span class="p">]</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">res</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;resource&#39;</span><span class="p">]</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">verb</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">res</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">log_address</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a><span class="k">def</span> <span class="nf">log_reply</span><span class="p">(</span><span class="n">addr</span><span class="p">:</span> <span class="nb">tuple</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="n">req</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">dict</span><span class="p">],</span> <span class="n">code</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a><span class="sd"> Logs an HTTP reply to stdout, with timestamp, address (host:port), code, UA.</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a><span class="sd"> </span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a><span class="sd"> Output is: `timestamp - host:port - HTTP-verb HTTP-resource - code - message`.</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a><span class="sd"> </span>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a><span class="sd"> Parameters</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a><span class="sd"> ----------</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a><span class="sd"> - addr: tuple[str, int]</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a><span class="sd"> The address to print, as a tuple (host, port)</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a><span class="sd"> - req: dict[str, dict]</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a><span class="sd"> The request to print.</span>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="sd"> - code: int</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="sd"> The replied code to print.</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">assert</span> <span class="s1">&#39;head&#39;</span> <span class="ow">in</span> <span class="n">req</span> \
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="ow">and</span> <span class="s1">&#39;verb&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="s1">&#39;resource&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">verb</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;verb&#39;</span><span class="p">]</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">res</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;resource&#39;</span><span class="p">]</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">verb</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">res</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="n">code</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="s1">&#39;params&#39;</span> <span class="ow">in</span> <span class="n">req</span> <span class="ow">and</span> <span class="s1">&#39;User-Agent&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">]:</span>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">msg</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; - </span><span class="si">{</span><span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">][</span><span class="s1">&#39;User-Agent&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="n">log_address</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="k">if</span> <span class="s1">&#39;params&#39;</span> <span class="ow">in</span> <span class="n">req</span> <span class="ow">and</span> <span class="s1">&#39;User-Agent&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">]:</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">msg</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; - </span><span class="si">{</span><span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">][</span><span class="s1">&#39;User-Agent&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">log_address</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a><span class="k">def</span> <span class="nf">log_reply</span><span class="p">(</span><span class="n">addr</span><span class="p">:</span> <span class="nb">tuple</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="n">req</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">dict</span><span class="p">],</span> <span class="n">code</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a><span class="sd"> Logs an HTTP reply to stdout, with timestamp, address (host:port), code.</span>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a><span class="sd"> If the User-Agent header is passed, its value is appended at the end.</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a><span class="sd"> </span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a><span class="sd"> Output is: `timestamp - host:port - HTTP-verb HTTP-resource - code`.</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a><span class="sd"> Output with User-Agent is: `timestamp - host:port - HTTP-verb HTTP-resource - code - user_agent`.</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="sd"> Parameters</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="sd"> ----------</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="sd"> - addr: tuple[str, int]</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a><span class="sd"> The address to print, as a tuple (host, port)</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a><span class="sd"> - req: dict[str, dict]</span>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a><span class="sd"> The request to print.</span>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a><span class="sd"> - code: int</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a><span class="sd"> The replied code to print.</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">assert</span> <span class="s1">&#39;head&#39;</span> <span class="ow">in</span> <span class="n">req</span> \
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="ow">and</span> <span class="s1">&#39;verb&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="s1">&#39;resource&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">verb</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;verb&#39;</span><span class="p">]</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="n">res</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;resource&#39;</span><span class="p">]</span>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">verb</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">res</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="n">code</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="k">if</span> <span class="s1">&#39;params&#39;</span> <span class="ow">in</span> <span class="n">req</span> <span class="ow">and</span> <span class="s1">&#39;User-Agent&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">]:</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">msg</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; - </span><span class="si">{</span><span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">][</span><span class="s1">&#39;User-Agent&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">log_address</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
</span></pre></div>
@ -271,33 +277,39 @@ The message string to print.</li>
<div class="pdoc-code codehilite"><pre><span></span><span id="log_request-51"><a href="#log_request-51"><span class="linenos">51</span></a><span class="k">def</span> <span class="nf">log_request</span><span class="p">(</span><span class="n">addr</span><span class="p">:</span> <span class="nb">tuple</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="n">req</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">dict</span><span class="p">]):</span>
</span><span id="log_request-52"><a href="#log_request-52"><span class="linenos">52</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="log_request-53"><a href="#log_request-53"><span class="linenos">53</span></a><span class="sd"> Logs a request message to stdout, with a timestamp and an address (host:port).</span>
</span><span id="log_request-54"><a href="#log_request-54"><span class="linenos">54</span></a><span class="sd"> </span>
</span><span id="log_request-55"><a href="#log_request-55"><span class="linenos">55</span></a><span class="sd"> Output is: `timestamp - host:port - message`.</span>
</span><span id="log_request-56"><a href="#log_request-56"><span class="linenos">56</span></a><span class="sd"> </span>
</span><span id="log_request-57"><a href="#log_request-57"><span class="linenos">57</span></a><span class="sd"> Parameters</span>
</span><span id="log_request-58"><a href="#log_request-58"><span class="linenos">58</span></a><span class="sd"> ----------</span>
</span><span id="log_request-59"><a href="#log_request-59"><span class="linenos">59</span></a><span class="sd"> - addr: tuple[str, int]</span>
</span><span id="log_request-60"><a href="#log_request-60"><span class="linenos">60</span></a><span class="sd"> The address to print, as a tuple (host, port)</span>
</span><span id="log_request-61"><a href="#log_request-61"><span class="linenos">61</span></a><span class="sd"> - req: dict[str, dict]</span>
</span><span id="log_request-62"><a href="#log_request-62"><span class="linenos">62</span></a><span class="sd"> The request to print.</span>
</span><span id="log_request-63"><a href="#log_request-63"><span class="linenos">63</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="log_request-64"><a href="#log_request-64"><span class="linenos">64</span></a> <span class="k">assert</span> <span class="s1">&#39;head&#39;</span> <span class="ow">in</span> <span class="n">req</span> \
</span><span id="log_request-65"><a href="#log_request-65"><span class="linenos">65</span></a> <span class="ow">and</span> <span class="s1">&#39;verb&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="s1">&#39;resource&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span>
</span><span id="log_request-66"><a href="#log_request-66"><span class="linenos">66</span></a>
</span><span id="log_request-67"><a href="#log_request-67"><span class="linenos">67</span></a> <span class="n">verb</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;verb&#39;</span><span class="p">]</span>
</span><span id="log_request-68"><a href="#log_request-68"><span class="linenos">68</span></a> <span class="n">res</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;resource&#39;</span><span class="p">]</span>
</span><span id="log_request-69"><a href="#log_request-69"><span class="linenos">69</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">verb</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">res</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="log_request-70"><a href="#log_request-70"><span class="linenos">70</span></a>
</span><span id="log_request-71"><a href="#log_request-71"><span class="linenos">71</span></a> <span class="k">if</span> <span class="s1">&#39;params&#39;</span> <span class="ow">in</span> <span class="n">req</span> <span class="ow">and</span> <span class="s1">&#39;User-Agent&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">]:</span>
</span><span id="log_request-72"><a href="#log_request-72"><span class="linenos">72</span></a> <span class="n">msg</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; - </span><span class="si">{</span><span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">][</span><span class="s1">&#39;User-Agent&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="log_request-54"><a href="#log_request-54"><span class="linenos">54</span></a><span class="sd"> If the User-Agent header is passed, its value is appended at the end.</span>
</span><span id="log_request-55"><a href="#log_request-55"><span class="linenos">55</span></a><span class="sd"> </span>
</span><span id="log_request-56"><a href="#log_request-56"><span class="linenos">56</span></a><span class="sd"> Output is: `timestamp - host:port - verb resource`.</span>
</span><span id="log_request-57"><a href="#log_request-57"><span class="linenos">57</span></a>
</span><span id="log_request-58"><a href="#log_request-58"><span class="linenos">58</span></a><span class="sd"> Output with User-Agent is: `timestamp - host:port - verb resource - user_agent`.</span>
</span><span id="log_request-59"><a href="#log_request-59"><span class="linenos">59</span></a>
</span><span id="log_request-60"><a href="#log_request-60"><span class="linenos">60</span></a><span class="sd"> Parameters</span>
</span><span id="log_request-61"><a href="#log_request-61"><span class="linenos">61</span></a><span class="sd"> ----------</span>
</span><span id="log_request-62"><a href="#log_request-62"><span class="linenos">62</span></a><span class="sd"> - addr: tuple[str, int]</span>
</span><span id="log_request-63"><a href="#log_request-63"><span class="linenos">63</span></a><span class="sd"> The address to print, as a tuple (host, port)</span>
</span><span id="log_request-64"><a href="#log_request-64"><span class="linenos">64</span></a><span class="sd"> - req: dict[str, dict]</span>
</span><span id="log_request-65"><a href="#log_request-65"><span class="linenos">65</span></a><span class="sd"> The request to print.</span>
</span><span id="log_request-66"><a href="#log_request-66"><span class="linenos">66</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="log_request-67"><a href="#log_request-67"><span class="linenos">67</span></a> <span class="k">assert</span> <span class="s1">&#39;head&#39;</span> <span class="ow">in</span> <span class="n">req</span> \
</span><span id="log_request-68"><a href="#log_request-68"><span class="linenos">68</span></a> <span class="ow">and</span> <span class="s1">&#39;verb&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="s1">&#39;resource&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span>
</span><span id="log_request-69"><a href="#log_request-69"><span class="linenos">69</span></a>
</span><span id="log_request-70"><a href="#log_request-70"><span class="linenos">70</span></a> <span class="n">verb</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;verb&#39;</span><span class="p">]</span>
</span><span id="log_request-71"><a href="#log_request-71"><span class="linenos">71</span></a> <span class="n">res</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;resource&#39;</span><span class="p">]</span>
</span><span id="log_request-72"><a href="#log_request-72"><span class="linenos">72</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">verb</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">res</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="log_request-73"><a href="#log_request-73"><span class="linenos">73</span></a>
</span><span id="log_request-74"><a href="#log_request-74"><span class="linenos">74</span></a> <span class="n">log_address</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
</span><span id="log_request-74"><a href="#log_request-74"><span class="linenos">74</span></a> <span class="k">if</span> <span class="s1">&#39;params&#39;</span> <span class="ow">in</span> <span class="n">req</span> <span class="ow">and</span> <span class="s1">&#39;User-Agent&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">]:</span>
</span><span id="log_request-75"><a href="#log_request-75"><span class="linenos">75</span></a> <span class="n">msg</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; - </span><span class="si">{</span><span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">][</span><span class="s1">&#39;User-Agent&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="log_request-76"><a href="#log_request-76"><span class="linenos">76</span></a>
</span><span id="log_request-77"><a href="#log_request-77"><span class="linenos">77</span></a> <span class="n">log_address</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Logs a request message to stdout, with a timestamp and an address (host:port).</p>
<div class="docstring"><p>Logs a request message to stdout, with a timestamp and an address (host:port).
If the User-Agent header is passed, its value is appended at the end.</p>
<p>Output is: <code>timestamp - host:port - message</code>.</p>
<p>Output is: <code>timestamp - host:port - verb resource</code>.</p>
<p>Output with User-Agent is: <code>timestamp - host:port - verb resource - user_agent</code>.</p>
<h2 id="parameters">Parameters</h2>
@ -322,38 +334,44 @@ The request to print.</li>
</div>
<a class="headerlink" href="#log_reply"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="log_reply-76"><a href="#log_reply-76"><span class="linenos"> 76</span></a><span class="k">def</span> <span class="nf">log_reply</span><span class="p">(</span><span class="n">addr</span><span class="p">:</span> <span class="nb">tuple</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="n">req</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">dict</span><span class="p">],</span> <span class="n">code</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
</span><span id="log_reply-77"><a href="#log_reply-77"><span class="linenos"> 77</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="log_reply-78"><a href="#log_reply-78"><span class="linenos"> 78</span></a><span class="sd"> Logs an HTTP reply to stdout, with timestamp, address (host:port), code, UA.</span>
</span><span id="log_reply-79"><a href="#log_reply-79"><span class="linenos"> 79</span></a><span class="sd"> </span>
</span><span id="log_reply-80"><a href="#log_reply-80"><span class="linenos"> 80</span></a><span class="sd"> Output is: `timestamp - host:port - HTTP-verb HTTP-resource - code - message`.</span>
</span><span id="log_reply-81"><a href="#log_reply-81"><span class="linenos"> 81</span></a><span class="sd"> </span>
</span><span id="log_reply-82"><a href="#log_reply-82"><span class="linenos"> 82</span></a><span class="sd"> Parameters</span>
</span><span id="log_reply-83"><a href="#log_reply-83"><span class="linenos"> 83</span></a><span class="sd"> ----------</span>
</span><span id="log_reply-84"><a href="#log_reply-84"><span class="linenos"> 84</span></a><span class="sd"> - addr: tuple[str, int]</span>
</span><span id="log_reply-85"><a href="#log_reply-85"><span class="linenos"> 85</span></a><span class="sd"> The address to print, as a tuple (host, port)</span>
</span><span id="log_reply-86"><a href="#log_reply-86"><span class="linenos"> 86</span></a><span class="sd"> - req: dict[str, dict]</span>
</span><span id="log_reply-87"><a href="#log_reply-87"><span class="linenos"> 87</span></a><span class="sd"> The request to print.</span>
</span><span id="log_reply-88"><a href="#log_reply-88"><span class="linenos"> 88</span></a><span class="sd"> - code: int</span>
</span><span id="log_reply-89"><a href="#log_reply-89"><span class="linenos"> 89</span></a><span class="sd"> The replied code to print.</span>
</span><span id="log_reply-90"><a href="#log_reply-90"><span class="linenos"> 90</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="log_reply-91"><a href="#log_reply-91"><span class="linenos"> 91</span></a> <span class="k">assert</span> <span class="s1">&#39;head&#39;</span> <span class="ow">in</span> <span class="n">req</span> \
</span><span id="log_reply-92"><a href="#log_reply-92"><span class="linenos"> 92</span></a> <span class="ow">and</span> <span class="s1">&#39;verb&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="s1">&#39;resource&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span>
</span><span id="log_reply-93"><a href="#log_reply-93"><span class="linenos"> 93</span></a>
</span><span id="log_reply-94"><a href="#log_reply-94"><span class="linenos"> 94</span></a> <span class="n">verb</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;verb&#39;</span><span class="p">]</span>
</span><span id="log_reply-95"><a href="#log_reply-95"><span class="linenos"> 95</span></a> <span class="n">res</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;resource&#39;</span><span class="p">]</span>
</span><span id="log_reply-96"><a href="#log_reply-96"><span class="linenos"> 96</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">verb</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">res</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="n">code</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="log_reply-97"><a href="#log_reply-97"><span class="linenos"> 97</span></a>
</span><span id="log_reply-98"><a href="#log_reply-98"><span class="linenos"> 98</span></a> <span class="k">if</span> <span class="s1">&#39;params&#39;</span> <span class="ow">in</span> <span class="n">req</span> <span class="ow">and</span> <span class="s1">&#39;User-Agent&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">]:</span>
</span><span id="log_reply-99"><a href="#log_reply-99"><span class="linenos"> 99</span></a> <span class="n">msg</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; - </span><span class="si">{</span><span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">][</span><span class="s1">&#39;User-Agent&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="log_reply-100"><a href="#log_reply-100"><span class="linenos">100</span></a>
</span><span id="log_reply-101"><a href="#log_reply-101"><span class="linenos">101</span></a> <span class="n">log_address</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="log_reply-79"><a href="#log_reply-79"><span class="linenos"> 79</span></a><span class="k">def</span> <span class="nf">log_reply</span><span class="p">(</span><span class="n">addr</span><span class="p">:</span> <span class="nb">tuple</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="n">req</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">dict</span><span class="p">],</span> <span class="n">code</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
</span><span id="log_reply-80"><a href="#log_reply-80"><span class="linenos"> 80</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="log_reply-81"><a href="#log_reply-81"><span class="linenos"> 81</span></a><span class="sd"> Logs an HTTP reply to stdout, with timestamp, address (host:port), code.</span>
</span><span id="log_reply-82"><a href="#log_reply-82"><span class="linenos"> 82</span></a><span class="sd"> If the User-Agent header is passed, its value is appended at the end.</span>
</span><span id="log_reply-83"><a href="#log_reply-83"><span class="linenos"> 83</span></a><span class="sd"> </span>
</span><span id="log_reply-84"><a href="#log_reply-84"><span class="linenos"> 84</span></a><span class="sd"> Output is: `timestamp - host:port - HTTP-verb HTTP-resource - code`.</span>
</span><span id="log_reply-85"><a href="#log_reply-85"><span class="linenos"> 85</span></a>
</span><span id="log_reply-86"><a href="#log_reply-86"><span class="linenos"> 86</span></a><span class="sd"> Output with User-Agent is: `timestamp - host:port - HTTP-verb HTTP-resource - code - user_agent`.</span>
</span><span id="log_reply-87"><a href="#log_reply-87"><span class="linenos"> 87</span></a>
</span><span id="log_reply-88"><a href="#log_reply-88"><span class="linenos"> 88</span></a><span class="sd"> Parameters</span>
</span><span id="log_reply-89"><a href="#log_reply-89"><span class="linenos"> 89</span></a><span class="sd"> ----------</span>
</span><span id="log_reply-90"><a href="#log_reply-90"><span class="linenos"> 90</span></a><span class="sd"> - addr: tuple[str, int]</span>
</span><span id="log_reply-91"><a href="#log_reply-91"><span class="linenos"> 91</span></a><span class="sd"> The address to print, as a tuple (host, port)</span>
</span><span id="log_reply-92"><a href="#log_reply-92"><span class="linenos"> 92</span></a><span class="sd"> - req: dict[str, dict]</span>
</span><span id="log_reply-93"><a href="#log_reply-93"><span class="linenos"> 93</span></a><span class="sd"> The request to print.</span>
</span><span id="log_reply-94"><a href="#log_reply-94"><span class="linenos"> 94</span></a><span class="sd"> - code: int</span>
</span><span id="log_reply-95"><a href="#log_reply-95"><span class="linenos"> 95</span></a><span class="sd"> The replied code to print.</span>
</span><span id="log_reply-96"><a href="#log_reply-96"><span class="linenos"> 96</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="log_reply-97"><a href="#log_reply-97"><span class="linenos"> 97</span></a> <span class="k">assert</span> <span class="s1">&#39;head&#39;</span> <span class="ow">in</span> <span class="n">req</span> \
</span><span id="log_reply-98"><a href="#log_reply-98"><span class="linenos"> 98</span></a> <span class="ow">and</span> <span class="s1">&#39;verb&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="s1">&#39;resource&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">]</span>
</span><span id="log_reply-99"><a href="#log_reply-99"><span class="linenos"> 99</span></a>
</span><span id="log_reply-100"><a href="#log_reply-100"><span class="linenos">100</span></a> <span class="n">verb</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;verb&#39;</span><span class="p">]</span>
</span><span id="log_reply-101"><a href="#log_reply-101"><span class="linenos">101</span></a> <span class="n">res</span> <span class="o">=</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;head&#39;</span><span class="p">][</span><span class="s1">&#39;resource&#39;</span><span class="p">]</span>
</span><span id="log_reply-102"><a href="#log_reply-102"><span class="linenos">102</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">verb</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">res</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="n">code</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="log_reply-103"><a href="#log_reply-103"><span class="linenos">103</span></a>
</span><span id="log_reply-104"><a href="#log_reply-104"><span class="linenos">104</span></a> <span class="k">if</span> <span class="s1">&#39;params&#39;</span> <span class="ow">in</span> <span class="n">req</span> <span class="ow">and</span> <span class="s1">&#39;User-Agent&#39;</span> <span class="ow">in</span> <span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">]:</span>
</span><span id="log_reply-105"><a href="#log_reply-105"><span class="linenos">105</span></a> <span class="n">msg</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; - </span><span class="si">{</span><span class="n">req</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">][</span><span class="s1">&#39;User-Agent&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="log_reply-106"><a href="#log_reply-106"><span class="linenos">106</span></a>
</span><span id="log_reply-107"><a href="#log_reply-107"><span class="linenos">107</span></a> <span class="n">log_address</span><span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Logs an HTTP reply to stdout, with timestamp, address (host:port), code, UA.</p>
<div class="docstring"><p>Logs an HTTP reply to stdout, with timestamp, address (host:port), code.
If the User-Agent header is passed, its value is appended at the end.</p>
<p>Output is: <code>timestamp - host:port - HTTP-verb HTTP-resource - code - message</code>.</p>
<p>Output is: <code>timestamp - host:port - HTTP-verb HTTP-resource - code</code>.</p>
<p>Output with User-Agent is: <code>timestamp - host:port - HTTP-verb HTTP-resource - code - user_agent</code>.</p>
<h2 id="parameters">Parameters</h2>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -50,9 +50,12 @@ def log_address(addr: tuple[str, int], msg: str):
def log_request(addr: tuple[str, int], req: dict[str, dict]):
"""
Logs a request message to stdout, with a timestamp and an address (host:port).
If the User-Agent header is passed, its value is appended at the end.
Output is: `timestamp - host:port - message`.
Output is: `timestamp - host:port - verb resource`.
Output with User-Agent is: `timestamp - host:port - verb resource - user_agent`.
Parameters
----------
- addr: tuple[str, int]
@ -74,10 +77,13 @@ def log_request(addr: tuple[str, int], req: dict[str, dict]):
def log_reply(addr: tuple[str, int], req: dict[str, dict], code: int):
"""
Logs an HTTP reply to stdout, with timestamp, address (host:port), code, UA.
Output is: `timestamp - host:port - HTTP-verb HTTP-resource - code - message`.
Logs an HTTP reply to stdout, with timestamp, address (host:port), code.
If the User-Agent header is passed, its value is appended at the end.
Output is: `timestamp - host:port - HTTP-verb HTTP-resource - code`.
Output with User-Agent is: `timestamp - host:port - HTTP-verb HTTP-resource - code - user_agent`.
Parameters
----------
- addr: tuple[str, int]

View file

@ -88,7 +88,6 @@ def test_get_resource_image():
tests_path = _find_root()
res_path = join(tests_path, 'resources', 'www', 'images', 'chaton.jpg')
out = get_resource(res_path=res_path)
print(out[0][:4])
assert out[0][:4] == b'\xff\xd8\xff\xe0'

View file

@ -18,6 +18,9 @@ from myserver.http_request import parse_request, parse_request_params, \
parse_request_head
def _compare_dicts(a: dict, b:dict, nested=False):
"""
Utility to compare two arrays, optionally with recursion.
"""
assert len(a) == len(b)
for k in a.keys():
assert k in b

View file

@ -14,18 +14,26 @@ Script to test the server.py module.
import pytest
import requests
from os.path import dirname, join
from threading import Thread
# import _thread, signal, sys
from myserver.server import serve #, handle_client, reply
from myserver.server import serve, handle_client, prepare_resource, prepare_reply
HTTP_PORT = 12345
""" The port to use during the tests, both for the server and client. """
# The function is called automatically (autouse=True) ...
def _find_root():
"""
A utility to return the path of the script for test resources.
"""
tests_dir = dirname(__file__)
return tests_dir
# The function is called automatically (autouse=True) ... REVERSED
# before and after all the tests in the file (scope="module")
@pytest.fixture(autouse=True, scope="module")
@pytest.fixture(autouse=False, scope="module")
def start_server():
"""
Automatically starts and stops the server when running the tests.
@ -44,7 +52,7 @@ def start_server():
return
def test_serve():
def _test_serve():
"""
Tests the serve() function by using the requests module.
@ -54,3 +62,35 @@ def test_serve():
print(f"Requesting url {url}.")
req = requests.get( url )
print(req)
def test_handle_client():
"""
Tests the handle_client() function by using the requests module.
"""
pass
def test_prepare_resource():
"""
Tests the prepare_resource() function by using the requests module.
"""
# Identify the resources directory to serve.
tests_path = _find_root()
path = join(tests_path, 'resources', 'www')
request = {
'head': {
'verb': 'GET',
'resource': '/index.html'
},
'params': {
'User-Agent': 'MyTest UserAgent v1.23'
}
}
reply, code = prepare_resource(root=path, req=request)
assert code == 200
reply = reply.decode()
print(reply)
assert reply.startswith('HTTP/1.0 200 OK\nContent-Type: text/html\nDate: ')
assert reply.endswith('See https://www.w3schools.com/html/html_basic.asp</p>\n\n</body>\n</html> ')