New Riddle (w/o Data!!)

This commit is contained in:
Magnus Bender 2024-10-09 20:48:06 +02:00
parent 6de994626b
commit 86adf41308
Signed by: bender
GPG Key ID: 5149A211831F2BD7
10 changed files with 326 additions and 185 deletions

View File

@ -14,7 +14,7 @@ if __name__ == "__main__":
from ums.utils import AgentMessage, RiddleData, RiddleDataType, RiddleSolution, ManagementRequest
ex = AgentMessage(
id="ex1",
id="ex5",
riddle={
"context":"Example 1",
"question":"Get the name of the person."

View File

@ -16,9 +16,10 @@ from fastapi import APIRouter, Request
from fastapi.responses import HTMLResponse, RedirectResponse
from fastapi.templating import Jinja2Templates
from ums.management.db import DB
from ums.utils import AgentMessage
class Interface():
_PREFIX = "/app"
@ -96,5 +97,5 @@ class Interface():
def new(request: Request):
return self.template.TemplateResponse(
'new.html',
{"request" : request}
{"request" : request, "AgentMessage" : AgentMessage}
)

File diff suppressed because one or more lines are too long

View File

@ -89,88 +89,89 @@
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="kn">from</span> <span class="nn">fastapi.responses</span> <span class="kn">import</span> <span class="n">HTMLResponse</span><span class="p">,</span> <span class="n">RedirectResponse</span>
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="kn">from</span> <span class="nn">fastapi.templating</span> <span class="kn">import</span> <span class="n">Jinja2Templates</span>
</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a>
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a>
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="kn">from</span> <span class="nn">ums.management.db</span> <span class="kn">import</span> <span class="n">DB</span>
</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a>
</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a><span class="k">class</span> <span class="nc">Interface</span><span class="p">():</span>
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a>
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="n">_PREFIX</span> <span class="o">=</span> <span class="s2">&quot;/app&quot;</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a>
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">template</span><span class="p">:</span><span class="n">Jinja2Templates</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span><span class="n">DB</span><span class="p">):</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">template</span> <span class="o">=</span> <span class="n">template</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">db</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a>
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">(</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_PREFIX</span><span class="p">,</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;app, gui&quot;</span><span class="p">]</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="p">)</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a>
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_routes</span><span class="p">()</span>
</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a>
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="k">def</span> <span class="nf">_add_routes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">,</span> <span class="n">response_class</span><span class="o">=</span><span class="n">RedirectResponse</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Redirect&quot;</span><span class="p">)</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="k">def</span> <span class="nf">index</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RedirectResponse</span><span class="p">:</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="k">return</span> <span class="n">RedirectResponse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_PREFIX</span> <span class="o">+</span> <span class="s2">&quot;/table&quot;</span><span class="p">)</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a>
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/table&quot;</span><span class="p">,</span> <span class="n">response_class</span><span class="o">=</span><span class="n">HTMLResponse</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Table of messages&quot;</span><span class="p">)</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="k">def</span> <span class="nf">table</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="nb">id</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">time_before</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">limit</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">offset</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">_count_only</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="p">):</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">db_args</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;limit&quot;</span> <span class="p">:</span> <span class="n">limit</span><span class="p">,</span>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;offset&quot;</span> <span class="p">:</span> <span class="n">offset</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="p">}</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">convert_time</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">globals</span><span class="p">[</span><span class="s2">&quot;date2timestamp&quot;</span><span class="p">](</span><span class="n">t</span><span class="p">)</span> \
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;^\d+$&#39;</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span> <span class="k">else</span> <span class="nb">int</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="k">for</span> <span class="n">v</span><span class="p">,</span><span class="n">n</span><span class="p">,</span><span class="n">f</span> <span class="ow">in</span> <span class="p">(</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="p">(</span><span class="nb">id</span><span class="p">,</span><span class="s1">&#39;id&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">),</span> <span class="p">(</span><span class="n">sender</span><span class="p">,</span><span class="s1">&#39;sender&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">),</span> <span class="p">(</span><span class="n">recipient</span><span class="p">,</span><span class="s1">&#39;recipient&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">),</span>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="p">(</span><span class="n">processed</span><span class="p">,</span><span class="s1">&#39;processed&#39;</span><span class="p">,</span> <span class="nb">bool</span><span class="p">),</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="p">(</span><span class="n">time_after</span><span class="p">,</span> <span class="s1">&#39;time_after&#39;</span><span class="p">,</span> <span class="n">convert_time</span><span class="p">),</span> <span class="p">(</span><span class="n">time_before</span><span class="p">,</span> <span class="s1">&#39;time_before&#39;</span><span class="p">,</span> <span class="n">convert_time</span><span class="p">)</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="p">):</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">v</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">db_args</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="k">if</span> <span class="n">_count_only</span><span class="p">:</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">len</span><span class="p">(</span><span class="o">**</span><span class="n">db_args</span><span class="p">)</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="k">def</span> <span class="nf">pagination_link</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">link_args</span> <span class="o">=</span> <span class="n">db_args</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">link_args</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="k">return</span> <span class="n">urlencode</span><span class="p">(</span><span class="n">link_args</span><span class="p">)</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="o">.</span><span class="n">TemplateResponse</span><span class="p">(</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="s1">&#39;table.html&#39;</span><span class="p">,</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="p">{</span><span class="s2">&quot;request&quot;</span> <span class="p">:</span> <span class="n">request</span><span class="p">,</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="s2">&quot;db&quot;</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="s2">&quot;db_args&quot;</span> <span class="p">:</span> <span class="n">db_args</span><span class="p">,</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="s2">&quot;pagination_link&quot;</span> <span class="p">:</span> <span class="n">pagination_link</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="p">}</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="p">)</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/table/total&quot;</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Total number of messages in table&quot;</span><span class="p">)</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">def</span> <span class="nf">table_total</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="nb">id</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">time_before</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">limit</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">offset</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">0</span>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="nb">locals</span><span class="p">()</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">del</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;table&#39;</span><span class="p">]</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;_count_only&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</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="k">return</span> <span class="n">table</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/new&quot;</span><span class="p">,</span> <span class="n">response_class</span><span class="o">=</span><span class="n">HTMLResponse</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Add new riddle&quot;</span><span class="p">)</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">def</span> <span class="nf">new</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="o">.</span><span class="n">TemplateResponse</span><span class="p">(</span>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="s1">&#39;new.html&#39;</span><span class="p">,</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="p">{</span><span class="s2">&quot;request&quot;</span> <span class="p">:</span> <span class="n">request</span><span class="p">}</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="p">)</span>
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="kn">from</span> <span class="nn">ums.management.db</span> <span class="kn">import</span> <span class="n">DB</span>
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a>
</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="kn">from</span> <span class="nn">ums.utils</span> <span class="kn">import</span> <span class="n">AgentMessage</span>
</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a>
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="k">class</span> <span class="nc">Interface</span><span class="p">():</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a>
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">_PREFIX</span> <span class="o">=</span> <span class="s2">&quot;/app&quot;</span>
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a>
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">template</span><span class="p">:</span><span class="n">Jinja2Templates</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span><span class="n">DB</span><span class="p">):</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">template</span> <span class="o">=</span> <span class="n">template</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">db</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a>
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">(</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_PREFIX</span><span class="p">,</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;app, gui&quot;</span><span class="p">]</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="p">)</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a>
</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_routes</span><span class="p">()</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a>
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="k">def</span> <span class="nf">_add_routes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">,</span> <span class="n">response_class</span><span class="o">=</span><span class="n">RedirectResponse</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Redirect&quot;</span><span class="p">)</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="k">def</span> <span class="nf">index</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RedirectResponse</span><span class="p">:</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="k">return</span> <span class="n">RedirectResponse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_PREFIX</span> <span class="o">+</span> <span class="s2">&quot;/table&quot;</span><span class="p">)</span>
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/table&quot;</span><span class="p">,</span> <span class="n">response_class</span><span class="o">=</span><span class="n">HTMLResponse</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Table of messages&quot;</span><span class="p">)</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="k">def</span> <span class="nf">table</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="nb">id</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">time_before</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="n">limit</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">offset</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">_count_only</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="p">):</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">db_args</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;limit&quot;</span> <span class="p">:</span> <span class="n">limit</span><span class="p">,</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;offset&quot;</span> <span class="p">:</span> <span class="n">offset</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="p">}</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="n">convert_time</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">globals</span><span class="p">[</span><span class="s2">&quot;date2timestamp&quot;</span><span class="p">](</span><span class="n">t</span><span class="p">)</span> \
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;^\d+$&#39;</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span> <span class="k">else</span> <span class="nb">int</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="k">for</span> <span class="n">v</span><span class="p">,</span><span class="n">n</span><span class="p">,</span><span class="n">f</span> <span class="ow">in</span> <span class="p">(</span>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="p">(</span><span class="nb">id</span><span class="p">,</span><span class="s1">&#39;id&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">),</span> <span class="p">(</span><span class="n">sender</span><span class="p">,</span><span class="s1">&#39;sender&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">),</span> <span class="p">(</span><span class="n">recipient</span><span class="p">,</span><span class="s1">&#39;recipient&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">),</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="p">(</span><span class="n">processed</span><span class="p">,</span><span class="s1">&#39;processed&#39;</span><span class="p">,</span> <span class="nb">bool</span><span class="p">),</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="p">(</span><span class="n">time_after</span><span class="p">,</span> <span class="s1">&#39;time_after&#39;</span><span class="p">,</span> <span class="n">convert_time</span><span class="p">),</span> <span class="p">(</span><span class="n">time_before</span><span class="p">,</span> <span class="s1">&#39;time_before&#39;</span><span class="p">,</span> <span class="n">convert_time</span><span class="p">)</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="p">):</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">v</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">db_args</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">v</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="k">if</span> <span class="n">_count_only</span><span class="p">:</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">len</span><span class="p">(</span><span class="o">**</span><span class="n">db_args</span><span class="p">)</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="k">def</span> <span class="nf">pagination_link</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">link_args</span> <span class="o">=</span> <span class="n">db_args</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="n">link_args</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="k">return</span> <span class="n">urlencode</span><span class="p">(</span><span class="n">link_args</span><span class="p">)</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="o">.</span><span class="n">TemplateResponse</span><span class="p">(</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="s1">&#39;table.html&#39;</span><span class="p">,</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="p">{</span><span class="s2">&quot;request&quot;</span> <span class="p">:</span> <span class="n">request</span><span class="p">,</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="s2">&quot;db&quot;</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="s2">&quot;db_args&quot;</span> <span class="p">:</span> <span class="n">db_args</span><span class="p">,</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="s2">&quot;pagination_link&quot;</span> <span class="p">:</span> <span class="n">pagination_link</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="p">}</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="p">)</span>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/table/total&quot;</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Total number of messages in table&quot;</span><span class="p">)</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="k">def</span> <span class="nf">table_total</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="nb">id</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">time_before</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">limit</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">offset</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">0</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="nb">locals</span><span class="p">()</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">del</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;table&#39;</span><span class="p">]</span>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;_count_only&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="k">return</span> <span class="n">table</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/new&quot;</span><span class="p">,</span> <span class="n">response_class</span><span class="o">=</span><span class="n">HTMLResponse</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Add new riddle&quot;</span><span class="p">)</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">def</span> <span class="nf">new</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="o">.</span><span class="n">TemplateResponse</span><span class="p">(</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="s1">&#39;new.html&#39;</span><span class="p">,</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="p">{</span><span class="s2">&quot;request&quot;</span> <span class="p">:</span> <span class="n">request</span><span class="p">,</span> <span class="s2">&quot;AgentMessage&quot;</span> <span class="p">:</span> <span class="n">AgentMessage</span><span class="p">}</span>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="p">)</span>
</span></pre></div>
@ -186,85 +187,85 @@
</div>
<a class="headerlink" href="#Interface"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Interface-23"><a href="#Interface-23"><span class="linenos"> 23</span></a><span class="k">class</span> <span class="nc">Interface</span><span class="p">():</span>
</span><span id="Interface-24"><a href="#Interface-24"><span class="linenos"> 24</span></a>
</span><span id="Interface-25"><a href="#Interface-25"><span class="linenos"> 25</span></a> <span class="n">_PREFIX</span> <span class="o">=</span> <span class="s2">&quot;/app&quot;</span>
</span><span id="Interface-26"><a href="#Interface-26"><span class="linenos"> 26</span></a>
</span><span id="Interface-27"><a href="#Interface-27"><span class="linenos"> 27</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">template</span><span class="p">:</span><span class="n">Jinja2Templates</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span><span class="n">DB</span><span class="p">):</span>
</span><span id="Interface-28"><a href="#Interface-28"><span class="linenos"> 28</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">template</span> <span class="o">=</span> <span class="n">template</span>
</span><span id="Interface-29"><a href="#Interface-29"><span class="linenos"> 29</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">db</span>
</span><span id="Interface-30"><a href="#Interface-30"><span class="linenos"> 30</span></a>
</span><span id="Interface-31"><a href="#Interface-31"><span class="linenos"> 31</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">(</span>
</span><span id="Interface-32"><a href="#Interface-32"><span class="linenos"> 32</span></a> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_PREFIX</span><span class="p">,</span>
</span><span id="Interface-33"><a href="#Interface-33"><span class="linenos"> 33</span></a> <span class="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;app, gui&quot;</span><span class="p">]</span>
</span><span id="Interface-34"><a href="#Interface-34"><span class="linenos"> 34</span></a> <span class="p">)</span>
</span><span id="Interface-35"><a href="#Interface-35"><span class="linenos"> 35</span></a>
</span><span id="Interface-36"><a href="#Interface-36"><span class="linenos"> 36</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_routes</span><span class="p">()</span>
</span><span id="Interface-37"><a href="#Interface-37"><span class="linenos"> 37</span></a>
</span><span id="Interface-38"><a href="#Interface-38"><span class="linenos"> 38</span></a> <span class="k">def</span> <span class="nf">_add_routes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Interface-39"><a href="#Interface-39"><span class="linenos"> 39</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">,</span> <span class="n">response_class</span><span class="o">=</span><span class="n">RedirectResponse</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Redirect&quot;</span><span class="p">)</span>
</span><span id="Interface-40"><a href="#Interface-40"><span class="linenos"> 40</span></a> <span class="k">def</span> <span class="nf">index</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RedirectResponse</span><span class="p">:</span>
</span><span id="Interface-41"><a href="#Interface-41"><span class="linenos"> 41</span></a> <span class="k">return</span> <span class="n">RedirectResponse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_PREFIX</span> <span class="o">+</span> <span class="s2">&quot;/table&quot;</span><span class="p">)</span>
</span><span id="Interface-42"><a href="#Interface-42"><span class="linenos"> 42</span></a>
</span><span id="Interface-43"><a href="#Interface-43"><span class="linenos"> 43</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/table&quot;</span><span class="p">,</span> <span class="n">response_class</span><span class="o">=</span><span class="n">HTMLResponse</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Table of messages&quot;</span><span class="p">)</span>
</span><span id="Interface-44"><a href="#Interface-44"><span class="linenos"> 44</span></a> <span class="k">def</span> <span class="nf">table</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span>
</span><span id="Interface-45"><a href="#Interface-45"><span class="linenos"> 45</span></a> <span class="nb">id</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Interface-46"><a href="#Interface-46"><span class="linenos"> 46</span></a> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Interface-47"><a href="#Interface-47"><span class="linenos"> 47</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">time_before</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Interface-48"><a href="#Interface-48"><span class="linenos"> 48</span></a> <span class="n">limit</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">offset</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">_count_only</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span>
</span><span id="Interface-49"><a href="#Interface-49"><span class="linenos"> 49</span></a> <span class="p">):</span>
</span><span id="Interface-50"><a href="#Interface-50"><span class="linenos"> 50</span></a>
</span><span id="Interface-51"><a href="#Interface-51"><span class="linenos"> 51</span></a> <span class="n">db_args</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Interface-52"><a href="#Interface-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;limit&quot;</span> <span class="p">:</span> <span class="n">limit</span><span class="p">,</span>
</span><span id="Interface-53"><a href="#Interface-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;offset&quot;</span> <span class="p">:</span> <span class="n">offset</span>
</span><span id="Interface-54"><a href="#Interface-54"><span class="linenos"> 54</span></a> <span class="p">}</span>
</span><span id="Interface-55"><a href="#Interface-55"><span class="linenos"> 55</span></a>
</span><span id="Interface-56"><a href="#Interface-56"><span class="linenos"> 56</span></a> <span class="n">convert_time</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">globals</span><span class="p">[</span><span class="s2">&quot;date2timestamp&quot;</span><span class="p">](</span><span class="n">t</span><span class="p">)</span> \
</span><span id="Interface-57"><a href="#Interface-57"><span class="linenos"> 57</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;^\d+$&#39;</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span> <span class="k">else</span> <span class="nb">int</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
</span><span id="Interface-58"><a href="#Interface-58"><span class="linenos"> 58</span></a> <span class="k">for</span> <span class="n">v</span><span class="p">,</span><span class="n">n</span><span class="p">,</span><span class="n">f</span> <span class="ow">in</span> <span class="p">(</span>
</span><span id="Interface-59"><a href="#Interface-59"><span class="linenos"> 59</span></a> <span class="p">(</span><span class="nb">id</span><span class="p">,</span><span class="s1">&#39;id&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">),</span> <span class="p">(</span><span class="n">sender</span><span class="p">,</span><span class="s1">&#39;sender&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">),</span> <span class="p">(</span><span class="n">recipient</span><span class="p">,</span><span class="s1">&#39;recipient&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">),</span>
</span><span id="Interface-60"><a href="#Interface-60"><span class="linenos"> 60</span></a> <span class="p">(</span><span class="n">processed</span><span class="p">,</span><span class="s1">&#39;processed&#39;</span><span class="p">,</span> <span class="nb">bool</span><span class="p">),</span>
</span><span id="Interface-61"><a href="#Interface-61"><span class="linenos"> 61</span></a> <span class="p">(</span><span class="n">time_after</span><span class="p">,</span> <span class="s1">&#39;time_after&#39;</span><span class="p">,</span> <span class="n">convert_time</span><span class="p">),</span> <span class="p">(</span><span class="n">time_before</span><span class="p">,</span> <span class="s1">&#39;time_before&#39;</span><span class="p">,</span> <span class="n">convert_time</span><span class="p">)</span>
</span><span id="Interface-62"><a href="#Interface-62"><span class="linenos"> 62</span></a> <span class="p">):</span>
</span><span id="Interface-63"><a href="#Interface-63"><span class="linenos"> 63</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">v</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Interface-64"><a href="#Interface-64"><span class="linenos"> 64</span></a> <span class="n">db_args</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
</span><span id="Interface-65"><a href="#Interface-65"><span class="linenos"> 65</span></a>
</span><span id="Interface-66"><a href="#Interface-66"><span class="linenos"> 66</span></a> <span class="k">if</span> <span class="n">_count_only</span><span class="p">:</span>
</span><span id="Interface-67"><a href="#Interface-67"><span class="linenos"> 67</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">len</span><span class="p">(</span><span class="o">**</span><span class="n">db_args</span><span class="p">)</span>
</span><span id="Interface-68"><a href="#Interface-68"><span class="linenos"> 68</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Interface-69"><a href="#Interface-69"><span class="linenos"> 69</span></a> <span class="k">def</span> <span class="nf">pagination_link</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="Interface-70"><a href="#Interface-70"><span class="linenos"> 70</span></a> <span class="n">link_args</span> <span class="o">=</span> <span class="n">db_args</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="Interface-71"><a href="#Interface-71"><span class="linenos"> 71</span></a> <span class="n">link_args</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="Interface-72"><a href="#Interface-72"><span class="linenos"> 72</span></a> <span class="k">return</span> <span class="n">urlencode</span><span class="p">(</span><span class="n">link_args</span><span class="p">)</span>
</span><span id="Interface-73"><a href="#Interface-73"><span class="linenos"> 73</span></a>
</span><span id="Interface-74"><a href="#Interface-74"><span class="linenos"> 74</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="o">.</span><span class="n">TemplateResponse</span><span class="p">(</span>
</span><span id="Interface-75"><a href="#Interface-75"><span class="linenos"> 75</span></a> <span class="s1">&#39;table.html&#39;</span><span class="p">,</span>
</span><span id="Interface-76"><a href="#Interface-76"><span class="linenos"> 76</span></a> <span class="p">{</span><span class="s2">&quot;request&quot;</span> <span class="p">:</span> <span class="n">request</span><span class="p">,</span>
</span><span id="Interface-77"><a href="#Interface-77"><span class="linenos"> 77</span></a> <span class="s2">&quot;db&quot;</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="s2">&quot;db_args&quot;</span> <span class="p">:</span> <span class="n">db_args</span><span class="p">,</span>
</span><span id="Interface-78"><a href="#Interface-78"><span class="linenos"> 78</span></a> <span class="s2">&quot;pagination_link&quot;</span> <span class="p">:</span> <span class="n">pagination_link</span>
</span><span id="Interface-79"><a href="#Interface-79"><span class="linenos"> 79</span></a> <span class="p">}</span>
</span><span id="Interface-80"><a href="#Interface-80"><span class="linenos"> 80</span></a> <span class="p">)</span>
</span><span id="Interface-81"><a href="#Interface-81"><span class="linenos"> 81</span></a>
</span><span id="Interface-82"><a href="#Interface-82"><span class="linenos"> 82</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/table/total&quot;</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Total number of messages in table&quot;</span><span class="p">)</span>
</span><span id="Interface-83"><a href="#Interface-83"><span class="linenos"> 83</span></a> <span class="k">def</span> <span class="nf">table_total</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span>
</span><span id="Interface-84"><a href="#Interface-84"><span class="linenos"> 84</span></a> <span class="nb">id</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Interface-85"><a href="#Interface-85"><span class="linenos"> 85</span></a> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Interface-86"><a href="#Interface-86"><span class="linenos"> 86</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">time_before</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Interface-87"><a href="#Interface-87"><span class="linenos"> 87</span></a> <span class="n">limit</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">offset</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">0</span>
</span><span id="Interface-88"><a href="#Interface-88"><span class="linenos"> 88</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="Interface-89"><a href="#Interface-89"><span class="linenos"> 89</span></a>
</span><span id="Interface-90"><a href="#Interface-90"><span class="linenos"> 90</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="nb">locals</span><span class="p">()</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="Interface-91"><a href="#Interface-91"><span class="linenos"> 91</span></a> <span class="k">del</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;table&#39;</span><span class="p">]</span>
</span><span id="Interface-92"><a href="#Interface-92"><span class="linenos"> 92</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;_count_only&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Interface-93"><a href="#Interface-93"><span class="linenos"> 93</span></a>
</span><span id="Interface-94"><a href="#Interface-94"><span class="linenos"> 94</span></a> <span class="k">return</span> <span class="n">table</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="Interface-95"><a href="#Interface-95"><span class="linenos"> 95</span></a>
</span><span id="Interface-96"><a href="#Interface-96"><span class="linenos"> 96</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/new&quot;</span><span class="p">,</span> <span class="n">response_class</span><span class="o">=</span><span class="n">HTMLResponse</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Add new riddle&quot;</span><span class="p">)</span>
</span><span id="Interface-97"><a href="#Interface-97"><span class="linenos"> 97</span></a> <span class="k">def</span> <span class="nf">new</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
</span><span id="Interface-98"><a href="#Interface-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="o">.</span><span class="n">TemplateResponse</span><span class="p">(</span>
</span><span id="Interface-99"><a href="#Interface-99"><span class="linenos"> 99</span></a> <span class="s1">&#39;new.html&#39;</span><span class="p">,</span>
</span><span id="Interface-100"><a href="#Interface-100"><span class="linenos">100</span></a> <span class="p">{</span><span class="s2">&quot;request&quot;</span> <span class="p">:</span> <span class="n">request</span><span class="p">}</span>
</span><span id="Interface-101"><a href="#Interface-101"><span class="linenos">101</span></a> <span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Interface-24"><a href="#Interface-24"><span class="linenos"> 24</span></a><span class="k">class</span> <span class="nc">Interface</span><span class="p">():</span>
</span><span id="Interface-25"><a href="#Interface-25"><span class="linenos"> 25</span></a>
</span><span id="Interface-26"><a href="#Interface-26"><span class="linenos"> 26</span></a> <span class="n">_PREFIX</span> <span class="o">=</span> <span class="s2">&quot;/app&quot;</span>
</span><span id="Interface-27"><a href="#Interface-27"><span class="linenos"> 27</span></a>
</span><span id="Interface-28"><a href="#Interface-28"><span class="linenos"> 28</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">template</span><span class="p">:</span><span class="n">Jinja2Templates</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span><span class="n">DB</span><span class="p">):</span>
</span><span id="Interface-29"><a href="#Interface-29"><span class="linenos"> 29</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">template</span> <span class="o">=</span> <span class="n">template</span>
</span><span id="Interface-30"><a href="#Interface-30"><span class="linenos"> 30</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">db</span>
</span><span id="Interface-31"><a href="#Interface-31"><span class="linenos"> 31</span></a>
</span><span id="Interface-32"><a href="#Interface-32"><span class="linenos"> 32</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">(</span>
</span><span id="Interface-33"><a href="#Interface-33"><span class="linenos"> 33</span></a> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_PREFIX</span><span class="p">,</span>
</span><span id="Interface-34"><a href="#Interface-34"><span class="linenos"> 34</span></a> <span class="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;app, gui&quot;</span><span class="p">]</span>
</span><span id="Interface-35"><a href="#Interface-35"><span class="linenos"> 35</span></a> <span class="p">)</span>
</span><span id="Interface-36"><a href="#Interface-36"><span class="linenos"> 36</span></a>
</span><span id="Interface-37"><a href="#Interface-37"><span class="linenos"> 37</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_routes</span><span class="p">()</span>
</span><span id="Interface-38"><a href="#Interface-38"><span class="linenos"> 38</span></a>
</span><span id="Interface-39"><a href="#Interface-39"><span class="linenos"> 39</span></a> <span class="k">def</span> <span class="nf">_add_routes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Interface-40"><a href="#Interface-40"><span class="linenos"> 40</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">,</span> <span class="n">response_class</span><span class="o">=</span><span class="n">RedirectResponse</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Redirect&quot;</span><span class="p">)</span>
</span><span id="Interface-41"><a href="#Interface-41"><span class="linenos"> 41</span></a> <span class="k">def</span> <span class="nf">index</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RedirectResponse</span><span class="p">:</span>
</span><span id="Interface-42"><a href="#Interface-42"><span class="linenos"> 42</span></a> <span class="k">return</span> <span class="n">RedirectResponse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_PREFIX</span> <span class="o">+</span> <span class="s2">&quot;/table&quot;</span><span class="p">)</span>
</span><span id="Interface-43"><a href="#Interface-43"><span class="linenos"> 43</span></a>
</span><span id="Interface-44"><a href="#Interface-44"><span class="linenos"> 44</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/table&quot;</span><span class="p">,</span> <span class="n">response_class</span><span class="o">=</span><span class="n">HTMLResponse</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Table of messages&quot;</span><span class="p">)</span>
</span><span id="Interface-45"><a href="#Interface-45"><span class="linenos"> 45</span></a> <span class="k">def</span> <span class="nf">table</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span>
</span><span id="Interface-46"><a href="#Interface-46"><span class="linenos"> 46</span></a> <span class="nb">id</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Interface-47"><a href="#Interface-47"><span class="linenos"> 47</span></a> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Interface-48"><a href="#Interface-48"><span class="linenos"> 48</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">time_before</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Interface-49"><a href="#Interface-49"><span class="linenos"> 49</span></a> <span class="n">limit</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">offset</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">_count_only</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">False</span>
</span><span id="Interface-50"><a href="#Interface-50"><span class="linenos"> 50</span></a> <span class="p">):</span>
</span><span id="Interface-51"><a href="#Interface-51"><span class="linenos"> 51</span></a>
</span><span id="Interface-52"><a href="#Interface-52"><span class="linenos"> 52</span></a> <span class="n">db_args</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Interface-53"><a href="#Interface-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;limit&quot;</span> <span class="p">:</span> <span class="n">limit</span><span class="p">,</span>
</span><span id="Interface-54"><a href="#Interface-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;offset&quot;</span> <span class="p">:</span> <span class="n">offset</span>
</span><span id="Interface-55"><a href="#Interface-55"><span class="linenos"> 55</span></a> <span class="p">}</span>
</span><span id="Interface-56"><a href="#Interface-56"><span class="linenos"> 56</span></a>
</span><span id="Interface-57"><a href="#Interface-57"><span class="linenos"> 57</span></a> <span class="n">convert_time</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">t</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">globals</span><span class="p">[</span><span class="s2">&quot;date2timestamp&quot;</span><span class="p">](</span><span class="n">t</span><span class="p">)</span> \
</span><span id="Interface-58"><a href="#Interface-58"><span class="linenos"> 58</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;^\d+$&#39;</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span> <span class="k">else</span> <span class="nb">int</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
</span><span id="Interface-59"><a href="#Interface-59"><span class="linenos"> 59</span></a> <span class="k">for</span> <span class="n">v</span><span class="p">,</span><span class="n">n</span><span class="p">,</span><span class="n">f</span> <span class="ow">in</span> <span class="p">(</span>
</span><span id="Interface-60"><a href="#Interface-60"><span class="linenos"> 60</span></a> <span class="p">(</span><span class="nb">id</span><span class="p">,</span><span class="s1">&#39;id&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">),</span> <span class="p">(</span><span class="n">sender</span><span class="p">,</span><span class="s1">&#39;sender&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">),</span> <span class="p">(</span><span class="n">recipient</span><span class="p">,</span><span class="s1">&#39;recipient&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">),</span>
</span><span id="Interface-61"><a href="#Interface-61"><span class="linenos"> 61</span></a> <span class="p">(</span><span class="n">processed</span><span class="p">,</span><span class="s1">&#39;processed&#39;</span><span class="p">,</span> <span class="nb">bool</span><span class="p">),</span>
</span><span id="Interface-62"><a href="#Interface-62"><span class="linenos"> 62</span></a> <span class="p">(</span><span class="n">time_after</span><span class="p">,</span> <span class="s1">&#39;time_after&#39;</span><span class="p">,</span> <span class="n">convert_time</span><span class="p">),</span> <span class="p">(</span><span class="n">time_before</span><span class="p">,</span> <span class="s1">&#39;time_before&#39;</span><span class="p">,</span> <span class="n">convert_time</span><span class="p">)</span>
</span><span id="Interface-63"><a href="#Interface-63"><span class="linenos"> 63</span></a> <span class="p">):</span>
</span><span id="Interface-64"><a href="#Interface-64"><span class="linenos"> 64</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">v</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Interface-65"><a href="#Interface-65"><span class="linenos"> 65</span></a> <span class="n">db_args</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
</span><span id="Interface-66"><a href="#Interface-66"><span class="linenos"> 66</span></a>
</span><span id="Interface-67"><a href="#Interface-67"><span class="linenos"> 67</span></a> <span class="k">if</span> <span class="n">_count_only</span><span class="p">:</span>
</span><span id="Interface-68"><a href="#Interface-68"><span class="linenos"> 68</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">len</span><span class="p">(</span><span class="o">**</span><span class="n">db_args</span><span class="p">)</span>
</span><span id="Interface-69"><a href="#Interface-69"><span class="linenos"> 69</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Interface-70"><a href="#Interface-70"><span class="linenos"> 70</span></a> <span class="k">def</span> <span class="nf">pagination_link</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span><span id="Interface-71"><a href="#Interface-71"><span class="linenos"> 71</span></a> <span class="n">link_args</span> <span class="o">=</span> <span class="n">db_args</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="Interface-72"><a href="#Interface-72"><span class="linenos"> 72</span></a> <span class="n">link_args</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="Interface-73"><a href="#Interface-73"><span class="linenos"> 73</span></a> <span class="k">return</span> <span class="n">urlencode</span><span class="p">(</span><span class="n">link_args</span><span class="p">)</span>
</span><span id="Interface-74"><a href="#Interface-74"><span class="linenos"> 74</span></a>
</span><span id="Interface-75"><a href="#Interface-75"><span class="linenos"> 75</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="o">.</span><span class="n">TemplateResponse</span><span class="p">(</span>
</span><span id="Interface-76"><a href="#Interface-76"><span class="linenos"> 76</span></a> <span class="s1">&#39;table.html&#39;</span><span class="p">,</span>
</span><span id="Interface-77"><a href="#Interface-77"><span class="linenos"> 77</span></a> <span class="p">{</span><span class="s2">&quot;request&quot;</span> <span class="p">:</span> <span class="n">request</span><span class="p">,</span>
</span><span id="Interface-78"><a href="#Interface-78"><span class="linenos"> 78</span></a> <span class="s2">&quot;db&quot;</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="s2">&quot;db_args&quot;</span> <span class="p">:</span> <span class="n">db_args</span><span class="p">,</span>
</span><span id="Interface-79"><a href="#Interface-79"><span class="linenos"> 79</span></a> <span class="s2">&quot;pagination_link&quot;</span> <span class="p">:</span> <span class="n">pagination_link</span>
</span><span id="Interface-80"><a href="#Interface-80"><span class="linenos"> 80</span></a> <span class="p">}</span>
</span><span id="Interface-81"><a href="#Interface-81"><span class="linenos"> 81</span></a> <span class="p">)</span>
</span><span id="Interface-82"><a href="#Interface-82"><span class="linenos"> 82</span></a>
</span><span id="Interface-83"><a href="#Interface-83"><span class="linenos"> 83</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/table/total&quot;</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Total number of messages in table&quot;</span><span class="p">)</span>
</span><span id="Interface-84"><a href="#Interface-84"><span class="linenos"> 84</span></a> <span class="k">def</span> <span class="nf">table_total</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span>
</span><span id="Interface-85"><a href="#Interface-85"><span class="linenos"> 85</span></a> <span class="nb">id</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sender</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">recipient</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Interface-86"><a href="#Interface-86"><span class="linenos"> 86</span></a> <span class="n">processed</span><span class="p">:</span><span class="nb">bool</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Interface-87"><a href="#Interface-87"><span class="linenos"> 87</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">time_before</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="o">|</span><span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Interface-88"><a href="#Interface-88"><span class="linenos"> 88</span></a> <span class="n">limit</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">offset</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">0</span>
</span><span id="Interface-89"><a href="#Interface-89"><span class="linenos"> 89</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="Interface-90"><a href="#Interface-90"><span class="linenos"> 90</span></a>
</span><span id="Interface-91"><a href="#Interface-91"><span class="linenos"> 91</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="nb">locals</span><span class="p">()</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="Interface-92"><a href="#Interface-92"><span class="linenos"> 92</span></a> <span class="k">del</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;table&#39;</span><span class="p">]</span>
</span><span id="Interface-93"><a href="#Interface-93"><span class="linenos"> 93</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;_count_only&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Interface-94"><a href="#Interface-94"><span class="linenos"> 94</span></a>
</span><span id="Interface-95"><a href="#Interface-95"><span class="linenos"> 95</span></a> <span class="k">return</span> <span class="n">table</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="Interface-96"><a href="#Interface-96"><span class="linenos"> 96</span></a>
</span><span id="Interface-97"><a href="#Interface-97"><span class="linenos"> 97</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/new&quot;</span><span class="p">,</span> <span class="n">response_class</span><span class="o">=</span><span class="n">HTMLResponse</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Add new riddle&quot;</span><span class="p">)</span>
</span><span id="Interface-98"><a href="#Interface-98"><span class="linenos"> 98</span></a> <span class="k">def</span> <span class="nf">new</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">):</span>
</span><span id="Interface-99"><a href="#Interface-99"><span class="linenos"> 99</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="o">.</span><span class="n">TemplateResponse</span><span class="p">(</span>
</span><span id="Interface-100"><a href="#Interface-100"><span class="linenos">100</span></a> <span class="s1">&#39;new.html&#39;</span><span class="p">,</span>
</span><span id="Interface-101"><a href="#Interface-101"><span class="linenos">101</span></a> <span class="p">{</span><span class="s2">&quot;request&quot;</span> <span class="p">:</span> <span class="n">request</span><span class="p">,</span> <span class="s2">&quot;AgentMessage&quot;</span> <span class="p">:</span> <span class="n">AgentMessage</span><span class="p">}</span>
</span><span id="Interface-102"><a href="#Interface-102"><span class="linenos">102</span></a> <span class="p">)</span>
</span></pre></div>
@ -280,16 +281,16 @@
</div>
<a class="headerlink" href="#Interface.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Interface.__init__-27"><a href="#Interface.__init__-27"><span class="linenos">27</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">template</span><span class="p">:</span><span class="n">Jinja2Templates</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span><span class="n">DB</span><span class="p">):</span>
</span><span id="Interface.__init__-28"><a href="#Interface.__init__-28"><span class="linenos">28</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">template</span> <span class="o">=</span> <span class="n">template</span>
</span><span id="Interface.__init__-29"><a href="#Interface.__init__-29"><span class="linenos">29</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">db</span>
</span><span id="Interface.__init__-30"><a href="#Interface.__init__-30"><span class="linenos">30</span></a>
</span><span id="Interface.__init__-31"><a href="#Interface.__init__-31"><span class="linenos">31</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">(</span>
</span><span id="Interface.__init__-32"><a href="#Interface.__init__-32"><span class="linenos">32</span></a> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_PREFIX</span><span class="p">,</span>
</span><span id="Interface.__init__-33"><a href="#Interface.__init__-33"><span class="linenos">33</span></a> <span class="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;app, gui&quot;</span><span class="p">]</span>
</span><span id="Interface.__init__-34"><a href="#Interface.__init__-34"><span class="linenos">34</span></a> <span class="p">)</span>
</span><span id="Interface.__init__-35"><a href="#Interface.__init__-35"><span class="linenos">35</span></a>
</span><span id="Interface.__init__-36"><a href="#Interface.__init__-36"><span class="linenos">36</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_routes</span><span class="p">()</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Interface.__init__-28"><a href="#Interface.__init__-28"><span class="linenos">28</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">template</span><span class="p">:</span><span class="n">Jinja2Templates</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span><span class="n">DB</span><span class="p">):</span>
</span><span id="Interface.__init__-29"><a href="#Interface.__init__-29"><span class="linenos">29</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">template</span> <span class="o">=</span> <span class="n">template</span>
</span><span id="Interface.__init__-30"><a href="#Interface.__init__-30"><span class="linenos">30</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">db</span>
</span><span id="Interface.__init__-31"><a href="#Interface.__init__-31"><span class="linenos">31</span></a>
</span><span id="Interface.__init__-32"><a href="#Interface.__init__-32"><span class="linenos">32</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">(</span>
</span><span id="Interface.__init__-33"><a href="#Interface.__init__-33"><span class="linenos">33</span></a> <span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_PREFIX</span><span class="p">,</span>
</span><span id="Interface.__init__-34"><a href="#Interface.__init__-34"><span class="linenos">34</span></a> <span class="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;app, gui&quot;</span><span class="p">]</span>
</span><span id="Interface.__init__-35"><a href="#Interface.__init__-35"><span class="linenos">35</span></a> <span class="p">)</span>
</span><span id="Interface.__init__-36"><a href="#Interface.__init__-36"><span class="linenos">36</span></a>
</span><span id="Interface.__init__-37"><a href="#Interface.__init__-37"><span class="linenos">37</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_routes</span><span class="p">()</span>
</span></pre></div>

View File

@ -854,7 +854,7 @@ about a riddle.</p>
</div>
<div id="RiddleData.file_plain" class="classattr">
<div class="attr variable">
<span class="name">file_plain</span><span class="annotation">: Annotated[str, AfterValidator(func=&lt;function _check_data_file at 0x10428cf40&gt;)]</span>
<span class="name">file_plain</span><span class="annotation">: Annotated[str, AfterValidator(func=&lt;function _check_data_file at 0x1067a8f40&gt;)]</span>
</div>
@ -870,7 +870,7 @@ The file must exist.</p>
</div>
<div id="RiddleData.file_extracted" class="classattr">
<div class="attr variable">
<span class="name">file_extracted</span><span class="annotation">: Optional[Annotated[str, AfterValidator(func=&lt;function _check_data_file at 0x10428cf40&gt;)]]</span>
<span class="name">file_extracted</span><span class="annotation">: Optional[Annotated[str, AfterValidator(func=&lt;function _check_data_file at 0x1067a8f40&gt;)]]</span>
</div>

View File

@ -1,4 +1,8 @@
.value_filter {
width: 150px;
}
#message_content{
height: 300px;
}

View File

@ -10,7 +10,6 @@ function pagination_link(name, value){
}
return '?' + $.param( link_args );
}
$(".value_filter").change((e)=>{
window.location = pagination_link($(e.target).attr('name').substr('filter_'.length), $(e.target).val())
});
@ -34,4 +33,73 @@ $("#autoRefresh").click(enable_auto_refresh);
if(sessionStorage.hasOwnProperty('auto_refresh') && sessionStorage.getItem('auto_refresh') === 'true'){
$("#autoRefresh").prop('checked', true);
enable_auto_refresh()
}
}
function update_json_message(){
let message = JSON.parse(basic_message);
var store_values = {}
$(".message-attribute").each((_,v)=>{
let el = $(v);
let name = el.attr('name');
let val = el.attr("type") == "checkbox" ? el.prop('checked') : el.val();
store_values[name] = val;
let curr_msg = message;
let last_ob = {};
let last_name = "";
name.split('.').forEach((e)=>{
last_ob = curr_msg;
last_name = e;
curr_msg = curr_msg[e];
});
last_ob[last_name] = val;
});
localStorage.setItem("new_riddle", JSON.stringify(store_values))
$("#message_content").val(JSON.stringify(message, null, 2));
}
function load_last_values(){
if(localStorage.getItem("new_riddle") !== null){
var items = JSON.parse(localStorage.getItem("new_riddle"))
Object.keys(items).forEach((k)=>{
let el = $("[name='"+k+"']");
if(el.attr("type") == "checkbox"){
el.prop('checked', items[k]);
}
else{
el.val(items[k]);
}
});
update_json_message()
}
}
if(typeof basic_message != 'undefined'){
load_last_values();
}
$(".message-attribute").change(update_json_message);
$(".message-attribute[type=checkbox]").click(update_json_message);
function send_json_message(json_str){
$.ajax(
"/message",
{
contentType : 'application/json',
type : 'POST',
data: json_str,
},
).then((d) => {
$("#message_sent .modal-title").text("Message Sent");
$("#message_sent .modal-body").html('<pre>'+JSON.stringify(d, null, 2)+'</pre>');
new bootstrap.Modal('#message_sent').show();
});
}
$("#send_message").click(
() => send_json_message($("#message_content").val())
);
$(".send_message_again").click(
(e) => send_json_message( $("pre#row_message_raw_"+$(e.target).attr('idx')).text() )
);

12
web/templates/modal.html Normal file
View File

@ -0,0 +1,12 @@
<div class="modal" tabindex="-1" id="message_sent">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
</div>
</div>
</div>
</div>

View File

@ -10,10 +10,61 @@
{% extends "base.html" %}
{% set title = "New" %}
{% block maincontent %}
<div class="float-end">
<a href="/app/table" class="btn btn-secondary">&larr; Back to Messages</a>
<div class="row">
<div class="col">
</div>
<div class="col">
<a href="/app/table" class="btn btn-secondary">&larr; Back to Messages</a>
</div>
</div>
<h2>Create New Riddle</h2>
<div class="mb-3">
<label for="message_id" class="form-label">Riddle ID</label>
<input type="text" name="id" class="message-attribute form-control" id="message_id">
</div>
<div class="mb-3">
<label for="message_id" class="form-label">Riddle Question</label>
<input type="text" name="riddle.question" class="message-attribute form-control" id="message_id">
</div>
<div class="mb-3">
<label for="message_context" class="form-label">Riddle Context</label>
<textarea class="form-control message-attribute" name="riddle.context" id="message_context" rows="2"></textarea>
</div>
<div class="mb-3">
<div class="form-check form-check-inline">
<input class="form-check-input message-attribute" name="status.extract.required" type="checkbox" id="message_extract" value="true" checked>
<label class="form-check-label" for="message_extract">Extract</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input message-attribute" name="status.solve.required" type="checkbox" id="message_solve" value="true" checked>
<label class="form-check-label" for="message_solve">Solve</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input message-attribute" name="status.validate.required" type="checkbox" id="message_validate" value="true" checked>
<label class="form-check-label" for="message_validate">Validate</label>
</div>
</div>
<h2>JSON Representation</h2>
<div class="mb-3">
<div class="form-floating">
<textarea class="form-control" id="message_content">
{{- AgentMessage(id="",riddle={"context":"","question":""}).model_dump_json(indent=2) -}}
</textarea>
<label for="message_content">Message to send</label>
</div>
</div>
<button type="submit" class="btn btn-primary" id="send_message">Send Message</button>
{% include "modal.html" %}
{% endblock %}
{% block morehead %}
<script>
const basic_message = '{{ AgentMessage(id="",riddle={"context":"","question":""}).model_dump_json()|safe }}';
</script>
{% endblock %}

View File

@ -64,13 +64,14 @@
{% endif %}
<tr id="row_{{loop.index}}">
{% set row_index = loop.index %}
{% for field in field_names %}
{% if field == "message" %}
<td>
<button type="button" class="btn btn-outline-secondary btn-outline" data-bs-toggle="modal" data-bs-target="#row_message_{{loop.index}}">
<button type="button" class="btn btn-outline-secondary btn-outline" data-bs-toggle="modal" data-bs-target="#row_message_{{row_index}}">
Show Message
</button>
<div class="modal fade" id="row_message_{{loop.index}}" tabindex="-1" aria-hidden="true">
<div class="modal fade" id="row_message_{{row_index}}" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
@ -78,7 +79,8 @@
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<pre>{{ item[field].model_dump_json(indent=2)|string }}</pre>
<pre id="row_message_raw_{{row_index}}">{{ item[field].model_dump_json(indent=2)|string }}</pre>
<button class="btn btn-warning send_message_again" idx="{{row_index}}">Send Again</button>
</div>
</div>
</div>
@ -128,6 +130,8 @@
</div>
</div>
{% include "modal.html" %}
{% endblock %}
{% block morehead %}
<script>