Access Messages via API from Python

This commit is contained in:
2024-10-30 18:02:05 +01:00
parent 01db00b3b4
commit cfe3dbd5bb
13 changed files with 1665 additions and 823 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -104,7 +104,7 @@
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a>
</span><span id="L-32"><a href="#L-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="L-33"><a href="#L-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="L-34"><a href="#L-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="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;gui&quot;</span><span class="p">]</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <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="bp">self</span><span class="o">.</span><span class="n">_add_routes</span><span class="p">()</span>
@ -202,7 +202,7 @@
</span><span id="Interface-32"><a href="#Interface-32"><span class="linenos"> 32</span></a>
</span><span id="Interface-33"><a href="#Interface-33"><span class="linenos"> 33</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-34"><a href="#Interface-34"><span class="linenos"> 34</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-35"><a href="#Interface-35"><span class="linenos"> 35</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="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;gui&quot;</span><span class="p">]</span>
</span><span id="Interface-36"><a href="#Interface-36"><span class="linenos"> 36</span></a> <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="bp">self</span><span class="o">.</span><span class="n">_add_routes</span><span class="p">()</span>
@ -296,7 +296,7 @@
</span><span id="Interface.__init__-32"><a href="#Interface.__init__-32"><span class="linenos">32</span></a>
</span><span id="Interface.__init__-33"><a href="#Interface.__init__-33"><span class="linenos">33</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__-34"><a href="#Interface.__init__-34"><span class="linenos">34</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__-35"><a href="#Interface.__init__-35"><span class="linenos">35</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="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;gui&quot;</span><span class="p">]</span>
</span><span id="Interface.__init__-36"><a href="#Interface.__init__-36"><span class="linenos">36</span></a> <span class="p">)</span>
</span><span id="Interface.__init__-37"><a href="#Interface.__init__-37"><span class="linenos">37</span></a>
</span><span id="Interface.__init__-38"><a href="#Interface.__init__-38"><span class="linenos">38</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_routes</span><span class="p">()</span>

View File

@ -77,96 +77,119 @@
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a>
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="kn">import</span> <span class="nn">os</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a>
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a>
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="kn">from</span> <span class="nn">fastapi</span> <span class="kn">import</span> <span class="n">FastAPI</span><span class="p">,</span> <span class="n">Request</span><span class="p">,</span> <span class="n">BackgroundTasks</span><span class="p">,</span> <span class="n">HTTPException</span>
</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><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 class="kn">from</span> <span class="nn">jinja2.runtime</span> <span class="kn">import</span> <span class="n">Undefined</span> <span class="k">as</span> <span class="n">JinjaUndefined</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.management.interface</span> <span class="kn">import</span> <span class="n">Interface</span>
</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</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 class="p">,</span> <span class="n">MessageDbRow</span>
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="kn">from</span> <span class="nn">ums.management.process</span> <span class="kn">import</span> <span class="n">MessageProcessor</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="kn">from</span> <span class="nn">ums.utils</span> <span class="kn">import</span> <span class="n">AgentMessage</span><span class="p">,</span> <span class="n">AgentResponse</span><span class="p">,</span> <span class="n">TEMPLATE_PATH</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">class</span> <span class="nc">WebMain</span><span class="p">():</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a>
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="n">_TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;%H:%M:%S </span><span class="si">%d</span><span class="s2">.%m.%Y&quot;</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="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_init_app</span><span class="p">()</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_init_templates</span><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">db</span> <span class="o">=</span> <span class="n">DB</span><span class="p">()</span>
</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">msg_process</span> <span class="o">=</span> <span class="n">MessageProcessor</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</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="bp">self</span><span class="o">.</span><span class="n">_add_routes</span><span class="p">()</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_routers</span><span class="p">()</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a>
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">List</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a>
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="kn">from</span> <span class="nn">fastapi</span> <span class="kn">import</span> <span class="n">FastAPI</span><span class="p">,</span> <span class="n">Request</span><span class="p">,</span> <span class="n">BackgroundTasks</span><span class="p">,</span> <span class="n">HTTPException</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.responses</span> <span class="kn">import</span> <span class="n">HTMLResponse</span>
</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</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-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">jinja2.runtime</span> <span class="kn">import</span> <span class="n">Undefined</span> <span class="k">as</span> <span class="n">JinjaUndefined</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="kn">from</span> <span class="nn">ums.management.interface</span> <span class="kn">import</span> <span class="n">Interface</span>
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</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 class="p">,</span> <span class="n">MessageDbRow</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="kn">from</span> <span class="nn">ums.management.process</span> <span class="kn">import</span> <span class="n">MessageProcessor</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="kn">from</span> <span class="nn">ums.utils</span> <span class="kn">import</span> <span class="n">AgentMessage</span><span class="p">,</span> <span class="n">AgentResponse</span><span class="p">,</span> <span class="n">TEMPLATE_PATH</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a><span class="k">class</span> <span class="nc">WebMain</span><span class="p">():</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="n">_TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;%H:%M:%S </span><span class="si">%d</span><span class="s2">.%m.%Y&quot;</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</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><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_init_app</span><span class="p">()</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_init_templates</span><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">db</span> <span class="o">=</span> <span class="n">DB</span><span class="p">()</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">msg_process</span> <span class="o">=</span> <span class="n">MessageProcessor</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a>
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</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-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_routers</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="k">def</span> <span class="nf">_init_app</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">app</span> <span class="o">=</span> <span class="n">FastAPI</span><span class="p">(</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="n">title</span><span class="o">=</span><span class="s2">&quot;Agenten Plattform&quot;</span><span class="p">,</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="n">description</span><span class="o">=</span><span class="s2">&quot;Agenten Plattform Management&quot;</span><span class="p">,</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">openapi_url</span><span class="o">=</span><span class="s2">&quot;/api/schema.json&quot;</span><span class="p">,</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">docs_url</span><span class="o">=</span><span class="s1">&#39;/api&#39;</span><span class="p">,</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="n">redoc_url</span><span class="o">=</span><span class="kc">None</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="k">def</span> <span class="nf">_init_templates</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">template</span> <span class="o">=</span> <span class="n">Jinja2Templates</span><span class="p">(</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">directory</span><span class="o">=</span><span class="n">TEMPLATE_PATH</span><span class="p">,</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">True</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="p">)</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="k">def</span> <span class="nf">timestamp2date</span><span class="p">(</span><span class="n">t</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="n">JinjaUndefined</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">JinjaUndefined</span><span class="p">)</span> \
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="k">else</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_TIME_FORMAT</span><span class="p">)</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <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;timestamp2date&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">timestamp2date</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="k">def</span> <span class="nf">date2timestamp</span><span class="p">(</span><span class="n">d</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="n">JinjaUndefined</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="p">:</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">JinjaUndefined</span><span class="p">)</span> \
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="k">else</span> <span class="nb">int</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_TIME_FORMAT</span><span class="p">)</span><span class="o">.</span><span class="n">timestamp</span><span class="p">())</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <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="o">=</span> <span class="n">date2timestamp</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a>
</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="k">def</span> <span class="nf">_init_app</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">app</span> <span class="o">=</span> <span class="n">FastAPI</span><span class="p">(</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="n">title</span><span class="o">=</span><span class="s2">&quot;Agenten Plattform&quot;</span><span class="p">,</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">description</span><span class="o">=</span><span class="s2">&quot;Agenten Plattform Management&quot;</span><span class="p">,</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">openapi_url</span><span class="o">=</span><span class="s2">&quot;/api/schema.json&quot;</span><span class="p">,</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="n">docs_url</span><span class="o">=</span><span class="s1">&#39;/api&#39;</span><span class="p">,</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">redoc_url</span><span class="o">=</span><span class="kc">None</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="p">)</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="k">def</span> <span class="nf">_init_templates</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">template</span> <span class="o">=</span> <span class="n">Jinja2Templates</span><span class="p">(</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">directory</span><span class="o">=</span><span class="n">TEMPLATE_PATH</span><span class="p">,</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">True</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="p">)</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="k">def</span> <span class="nf">timestamp2date</span><span class="p">(</span><span class="n">t</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="n">JinjaUndefined</span><span class="p">)</span> <span class="o">-&gt;</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="k">return</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">JinjaUndefined</span><span class="p">)</span> \
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="k">else</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_TIME_FORMAT</span><span class="p">)</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <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;timestamp2date&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">timestamp2date</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="k">def</span> <span class="nf">date2timestamp</span><span class="p">(</span><span class="n">d</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="n">JinjaUndefined</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="p">:</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">JinjaUndefined</span><span class="p">)</span> \
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="k">else</span> <span class="nb">int</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_TIME_FORMAT</span><span class="p">)</span><span class="o">.</span><span class="n">timestamp</span><span class="p">())</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <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="o">=</span> <span class="n">date2timestamp</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="k">def</span> <span class="nf">_add_routers</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">interface_router</span> <span class="o">=</span> <span class="n">Interface</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">include_router</span><span class="p">(</span><span class="n">interface_router</span><span class="o">.</span><span class="n">router</span><span class="p">)</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</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-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="nd">@self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/index&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;Link list&quot;</span><span class="p">)</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</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><span id="L-76"><a href="#L-76"><span class="linenos"> 76</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-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="s1">&#39;index.html&#39;</span><span class="p">,</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</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-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">app</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;/message&quot;</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Send a message to the management&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">message</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="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span> <span class="n">background_tasks</span><span class="p">:</span> <span class="n">BackgroundTasks</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">receiver</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s1">&#39;host&#39;</span><span class="p">]</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="k">if</span> <span class="s1">&#39;:&#39;</span> <span class="ow">in</span> <span class="n">receiver</span><span class="p">:</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">receiver</span> <span class="o">=</span> <span class="n">receiver</span><span class="p">[:</span><span class="n">receiver</span><span class="o">.</span><span class="n">rindex</span><span class="p">(</span><span class="s1">&#39;:&#39;</span><span class="p">)]</span>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">sender</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s1">&#39;x-forwarded-for&#39;</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg_process</span><span class="o">.</span><span class="n">new_message</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">receiver</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">background_tasks</span><span class="p">)</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/status&quot;</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Get status of a message&quot;</span><span class="p">)</span>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">def</span> <span class="nf">status</span><span class="p">(</span><span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="p">:</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">by_count</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="k">if</span> <span class="n">msg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">&quot;Message not found&quot;</span><span class="p">)</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="n">msg</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="k">def</span> <span class="nf">_add_routers</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">interface_router</span> <span class="o">=</span> <span class="n">Interface</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">include_router</span><span class="p">(</span><span class="n">interface_router</span><span class="o">.</span><span class="n">router</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">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-74"><a href="#L-74"><span class="linenos"> 74</span></a>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/index&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;Link list&quot;</span><span class="p">)</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</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><span id="L-77"><a href="#L-77"><span class="linenos"> 77</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-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="s1">&#39;index.html&#39;</span><span class="p">,</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</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-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">app</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;/message&quot;</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Send a message to the management&quot;</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;agents&#39;</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">message</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="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span> <span class="n">background_tasks</span><span class="p">:</span> <span class="n">BackgroundTasks</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">receiver</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s1">&#39;host&#39;</span><span class="p">]</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="k">if</span> <span class="s1">&#39;:&#39;</span> <span class="ow">in</span> <span class="n">receiver</span><span class="p">:</span>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">receiver</span> <span class="o">=</span> <span class="n">receiver</span><span class="p">[:</span><span class="n">receiver</span><span class="o">.</span><span class="n">rindex</span><span class="p">(</span><span class="s1">&#39;:&#39;</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">sender</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s1">&#39;x-forwarded-for&#39;</span><span class="p">]</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg_process</span><span class="o">.</span><span class="n">new_message</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">receiver</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">background_tasks</span><span class="p">)</span>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/list&quot;</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Get list of messages (like table)&quot;</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;cli, agents&quot;</span><span class="p">])</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="k">def</span> <span class="nf">list</span><span class="p">(</span><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-95"><a href="#L-95"><span class="linenos"> 95</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 class="n">solution</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-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</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="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</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-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">MessageDbRow</span><span class="p">]:</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;ums.management.main&quot;</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;SERVE&#39;</span><span class="p">,</span> <span class="s1">&#39;false&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span><span class="p">:</span>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">main</span> <span class="o">=</span> <span class="n">WebMain</span><span class="p">()</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">app</span> <span class="o">=</span> <span class="n">main</span><span class="o">.</span><span class="n">app</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="n">db_args</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</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-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="s2">&quot;offset&quot;</span> <span class="p">:</span> <span class="n">offset</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="p">}</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="k">for</span> <span class="n">v</span><span class="p">,</span><span class="n">n</span> <span class="ow">in</span> <span class="p">(</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</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="p">(</span><span class="n">sender</span><span class="p">,</span><span class="s1">&#39;sender&#39;</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><span id="L-107"><a href="#L-107"><span class="linenos">107</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="p">(</span><span class="n">solution</span><span class="p">,</span><span class="s1">&#39;solution&#39;</span><span class="p">),</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</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="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><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="p">):</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</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-111"><a href="#L-111"><span class="linenos">111</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">v</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">row</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">iterate</span><span class="p">(</span><span class="o">**</span><span class="n">db_args</span><span class="p">)]</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/list/single&quot;</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Get a single message&quot;</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;cli, agents&quot;</span><span class="p">])</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="k">def</span> <span class="nf">status</span><span class="p">(</span><span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="p">:</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">by_count</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="k">if</span> <span class="n">msg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">&quot;Message not found&quot;</span><span class="p">)</span>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">return</span> <span class="n">msg</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;ums.management.main&quot;</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;SERVE&#39;</span><span class="p">,</span> <span class="s1">&#39;false&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span><span class="p">:</span>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">main</span> <span class="o">=</span> <span class="n">WebMain</span><span class="p">()</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">app</span> <span class="o">=</span> <span class="n">main</span><span class="o">.</span><span class="n">app</span>
</span></pre></div>
@ -182,78 +205,100 @@
</div>
<a class="headerlink" href="#WebMain"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="WebMain-28"><a href="#WebMain-28"><span class="linenos">28</span></a><span class="k">class</span> <span class="nc">WebMain</span><span class="p">():</span>
</span><span id="WebMain-29"><a href="#WebMain-29"><span class="linenos">29</span></a>
</span><span id="WebMain-30"><a href="#WebMain-30"><span class="linenos">30</span></a> <span class="n">_TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;%H:%M:%S </span><span class="si">%d</span><span class="s2">.%m.%Y&quot;</span>
</span><span id="WebMain-31"><a href="#WebMain-31"><span class="linenos">31</span></a>
</span><span id="WebMain-32"><a href="#WebMain-32"><span class="linenos">32</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><span id="WebMain-33"><a href="#WebMain-33"><span class="linenos">33</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_init_app</span><span class="p">()</span>
</span><span id="WebMain-34"><a href="#WebMain-34"><span class="linenos">34</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_init_templates</span><span class="p">()</span>
</span><span id="WebMain-35"><a href="#WebMain-35"><span class="linenos">35</span></a>
</span><span id="WebMain-36"><a href="#WebMain-36"><span class="linenos">36</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 class="p">()</span>
</span><span id="WebMain-37"><a href="#WebMain-37"><span class="linenos">37</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">msg_process</span> <span class="o">=</span> <span class="n">MessageProcessor</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
</span><span id="WebMain-38"><a href="#WebMain-38"><span class="linenos">38</span></a>
</span><span id="WebMain-39"><a href="#WebMain-39"><span class="linenos">39</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_routes</span><span class="p">()</span>
</span><span id="WebMain-40"><a href="#WebMain-40"><span class="linenos">40</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_routers</span><span class="p">()</span>
</span><span id="WebMain-41"><a href="#WebMain-41"><span class="linenos">41</span></a>
</span><span id="WebMain-42"><a href="#WebMain-42"><span class="linenos">42</span></a>
</span><span id="WebMain-43"><a href="#WebMain-43"><span class="linenos">43</span></a> <span class="k">def</span> <span class="nf">_init_app</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="WebMain-44"><a href="#WebMain-44"><span class="linenos">44</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">app</span> <span class="o">=</span> <span class="n">FastAPI</span><span class="p">(</span>
</span><span id="WebMain-45"><a href="#WebMain-45"><span class="linenos">45</span></a> <span class="n">title</span><span class="o">=</span><span class="s2">&quot;Agenten Plattform&quot;</span><span class="p">,</span>
</span><span id="WebMain-46"><a href="#WebMain-46"><span class="linenos">46</span></a> <span class="n">description</span><span class="o">=</span><span class="s2">&quot;Agenten Plattform Management&quot;</span><span class="p">,</span>
</span><span id="WebMain-47"><a href="#WebMain-47"><span class="linenos">47</span></a> <span class="n">openapi_url</span><span class="o">=</span><span class="s2">&quot;/api/schema.json&quot;</span><span class="p">,</span>
</span><span id="WebMain-48"><a href="#WebMain-48"><span class="linenos">48</span></a> <span class="n">docs_url</span><span class="o">=</span><span class="s1">&#39;/api&#39;</span><span class="p">,</span>
</span><span id="WebMain-49"><a href="#WebMain-49"><span class="linenos">49</span></a> <span class="n">redoc_url</span><span class="o">=</span><span class="kc">None</span>
</span><span id="WebMain-50"><a href="#WebMain-50"><span class="linenos">50</span></a> <span class="p">)</span>
</span><span id="WebMain-51"><a href="#WebMain-51"><span class="linenos">51</span></a>
</span><span id="WebMain-52"><a href="#WebMain-52"><span class="linenos">52</span></a> <span class="k">def</span> <span class="nf">_init_templates</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="WebMain-53"><a href="#WebMain-53"><span class="linenos">53</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">template</span> <span class="o">=</span> <span class="n">Jinja2Templates</span><span class="p">(</span>
</span><span id="WebMain-54"><a href="#WebMain-54"><span class="linenos">54</span></a> <span class="n">directory</span><span class="o">=</span><span class="n">TEMPLATE_PATH</span><span class="p">,</span>
</span><span id="WebMain-55"><a href="#WebMain-55"><span class="linenos">55</span></a> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">True</span>
</span><span id="WebMain-56"><a href="#WebMain-56"><span class="linenos">56</span></a> <span class="p">)</span>
</span><span id="WebMain-57"><a href="#WebMain-57"><span class="linenos">57</span></a>
</span><span id="WebMain-58"><a href="#WebMain-58"><span class="linenos">58</span></a> <span class="k">def</span> <span class="nf">timestamp2date</span><span class="p">(</span><span class="n">t</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="n">JinjaUndefined</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="WebMain-59"><a href="#WebMain-59"><span class="linenos">59</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">JinjaUndefined</span><span class="p">)</span> \
</span><span id="WebMain-60"><a href="#WebMain-60"><span class="linenos">60</span></a> <span class="k">else</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_TIME_FORMAT</span><span class="p">)</span>
</span><span id="WebMain-61"><a href="#WebMain-61"><span class="linenos">61</span></a> <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;timestamp2date&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">timestamp2date</span>
</span><span id="WebMain-62"><a href="#WebMain-62"><span class="linenos">62</span></a>
</span><span id="WebMain-63"><a href="#WebMain-63"><span class="linenos">63</span></a> <span class="k">def</span> <span class="nf">date2timestamp</span><span class="p">(</span><span class="n">d</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="n">JinjaUndefined</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="p">:</span>
</span><span id="WebMain-64"><a href="#WebMain-64"><span class="linenos">64</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">JinjaUndefined</span><span class="p">)</span> \
</span><span id="WebMain-65"><a href="#WebMain-65"><span class="linenos">65</span></a> <span class="k">else</span> <span class="nb">int</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_TIME_FORMAT</span><span class="p">)</span><span class="o">.</span><span class="n">timestamp</span><span class="p">())</span>
</span><span id="WebMain-66"><a href="#WebMain-66"><span class="linenos">66</span></a> <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="o">=</span> <span class="n">date2timestamp</span>
</span><span id="WebMain-67"><a href="#WebMain-67"><span class="linenos">67</span></a>
</span><span id="WebMain-68"><a href="#WebMain-68"><span class="linenos">68</span></a>
</span><span id="WebMain-69"><a href="#WebMain-69"><span class="linenos">69</span></a> <span class="k">def</span> <span class="nf">_add_routers</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="WebMain-70"><a href="#WebMain-70"><span class="linenos">70</span></a> <span class="n">interface_router</span> <span class="o">=</span> <span class="n">Interface</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
</span><span id="WebMain-71"><a href="#WebMain-71"><span class="linenos">71</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">include_router</span><span class="p">(</span><span class="n">interface_router</span><span class="o">.</span><span class="n">router</span><span class="p">)</span>
</span><span id="WebMain-72"><a href="#WebMain-72"><span class="linenos">72</span></a>
</span><span id="WebMain-73"><a href="#WebMain-73"><span class="linenos">73</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="WebMain-74"><a href="#WebMain-74"><span class="linenos">74</span></a>
</span><span id="WebMain-75"><a href="#WebMain-75"><span class="linenos">75</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/index&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;Link list&quot;</span><span class="p">)</span>
</span><span id="WebMain-76"><a href="#WebMain-76"><span class="linenos">76</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><span id="WebMain-77"><a href="#WebMain-77"><span class="linenos">77</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="WebMain-78"><a href="#WebMain-78"><span class="linenos">78</span></a> <span class="s1">&#39;index.html&#39;</span><span class="p">,</span>
</span><span id="WebMain-79"><a href="#WebMain-79"><span class="linenos">79</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="WebMain-80"><a href="#WebMain-80"><span class="linenos">80</span></a> <span class="p">)</span>
</span><span id="WebMain-81"><a href="#WebMain-81"><span class="linenos">81</span></a>
</span><span id="WebMain-82"><a href="#WebMain-82"><span class="linenos">82</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;/message&quot;</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Send a message to the management&quot;</span><span class="p">)</span>
</span><span id="WebMain-83"><a href="#WebMain-83"><span class="linenos">83</span></a> <span class="k">def</span> <span class="nf">message</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="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span> <span class="n">background_tasks</span><span class="p">:</span> <span class="n">BackgroundTasks</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span>
</span><span id="WebMain-84"><a href="#WebMain-84"><span class="linenos">84</span></a>
</span><span id="WebMain-85"><a href="#WebMain-85"><span class="linenos">85</span></a> <span class="n">receiver</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s1">&#39;host&#39;</span><span class="p">]</span>
</span><span id="WebMain-86"><a href="#WebMain-86"><span class="linenos">86</span></a> <span class="k">if</span> <span class="s1">&#39;:&#39;</span> <span class="ow">in</span> <span class="n">receiver</span><span class="p">:</span>
</span><span id="WebMain-87"><a href="#WebMain-87"><span class="linenos">87</span></a> <span class="n">receiver</span> <span class="o">=</span> <span class="n">receiver</span><span class="p">[:</span><span class="n">receiver</span><span class="o">.</span><span class="n">rindex</span><span class="p">(</span><span class="s1">&#39;:&#39;</span><span class="p">)]</span>
</span><span id="WebMain-88"><a href="#WebMain-88"><span class="linenos">88</span></a>
</span><span id="WebMain-89"><a href="#WebMain-89"><span class="linenos">89</span></a> <span class="n">sender</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s1">&#39;x-forwarded-for&#39;</span><span class="p">]</span>
</span><span id="WebMain-90"><a href="#WebMain-90"><span class="linenos">90</span></a>
</span><span id="WebMain-91"><a href="#WebMain-91"><span class="linenos">91</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg_process</span><span class="o">.</span><span class="n">new_message</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">receiver</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">background_tasks</span><span class="p">)</span>
</span><span id="WebMain-92"><a href="#WebMain-92"><span class="linenos">92</span></a>
</span><span id="WebMain-93"><a href="#WebMain-93"><span class="linenos">93</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/status&quot;</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Get status of a message&quot;</span><span class="p">)</span>
</span><span id="WebMain-94"><a href="#WebMain-94"><span class="linenos">94</span></a> <span class="k">def</span> <span class="nf">status</span><span class="p">(</span><span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="p">:</span>
</span><span id="WebMain-95"><a href="#WebMain-95"><span class="linenos">95</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">by_count</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</span><span id="WebMain-96"><a href="#WebMain-96"><span class="linenos">96</span></a> <span class="k">if</span> <span class="n">msg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="WebMain-97"><a href="#WebMain-97"><span class="linenos">97</span></a> <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">&quot;Message not found&quot;</span><span class="p">)</span>
</span><span id="WebMain-98"><a href="#WebMain-98"><span class="linenos">98</span></a>
</span><span id="WebMain-99"><a href="#WebMain-99"><span class="linenos">99</span></a> <span class="k">return</span> <span class="n">msg</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="WebMain-29"><a href="#WebMain-29"><span class="linenos"> 29</span></a><span class="k">class</span> <span class="nc">WebMain</span><span class="p">():</span>
</span><span id="WebMain-30"><a href="#WebMain-30"><span class="linenos"> 30</span></a>
</span><span id="WebMain-31"><a href="#WebMain-31"><span class="linenos"> 31</span></a> <span class="n">_TIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;%H:%M:%S </span><span class="si">%d</span><span class="s2">.%m.%Y&quot;</span>
</span><span id="WebMain-32"><a href="#WebMain-32"><span class="linenos"> 32</span></a>
</span><span id="WebMain-33"><a href="#WebMain-33"><span class="linenos"> 33</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><span id="WebMain-34"><a href="#WebMain-34"><span class="linenos"> 34</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_init_app</span><span class="p">()</span>
</span><span id="WebMain-35"><a href="#WebMain-35"><span class="linenos"> 35</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_init_templates</span><span class="p">()</span>
</span><span id="WebMain-36"><a href="#WebMain-36"><span class="linenos"> 36</span></a>
</span><span id="WebMain-37"><a href="#WebMain-37"><span class="linenos"> 37</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 class="p">()</span>
</span><span id="WebMain-38"><a href="#WebMain-38"><span class="linenos"> 38</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">msg_process</span> <span class="o">=</span> <span class="n">MessageProcessor</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
</span><span id="WebMain-39"><a href="#WebMain-39"><span class="linenos"> 39</span></a>
</span><span id="WebMain-40"><a href="#WebMain-40"><span class="linenos"> 40</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_routes</span><span class="p">()</span>
</span><span id="WebMain-41"><a href="#WebMain-41"><span class="linenos"> 41</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_routers</span><span class="p">()</span>
</span><span id="WebMain-42"><a href="#WebMain-42"><span class="linenos"> 42</span></a>
</span><span id="WebMain-43"><a href="#WebMain-43"><span class="linenos"> 43</span></a>
</span><span id="WebMain-44"><a href="#WebMain-44"><span class="linenos"> 44</span></a> <span class="k">def</span> <span class="nf">_init_app</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="WebMain-45"><a href="#WebMain-45"><span class="linenos"> 45</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">app</span> <span class="o">=</span> <span class="n">FastAPI</span><span class="p">(</span>
</span><span id="WebMain-46"><a href="#WebMain-46"><span class="linenos"> 46</span></a> <span class="n">title</span><span class="o">=</span><span class="s2">&quot;Agenten Plattform&quot;</span><span class="p">,</span>
</span><span id="WebMain-47"><a href="#WebMain-47"><span class="linenos"> 47</span></a> <span class="n">description</span><span class="o">=</span><span class="s2">&quot;Agenten Plattform Management&quot;</span><span class="p">,</span>
</span><span id="WebMain-48"><a href="#WebMain-48"><span class="linenos"> 48</span></a> <span class="n">openapi_url</span><span class="o">=</span><span class="s2">&quot;/api/schema.json&quot;</span><span class="p">,</span>
</span><span id="WebMain-49"><a href="#WebMain-49"><span class="linenos"> 49</span></a> <span class="n">docs_url</span><span class="o">=</span><span class="s1">&#39;/api&#39;</span><span class="p">,</span>
</span><span id="WebMain-50"><a href="#WebMain-50"><span class="linenos"> 50</span></a> <span class="n">redoc_url</span><span class="o">=</span><span class="kc">None</span>
</span><span id="WebMain-51"><a href="#WebMain-51"><span class="linenos"> 51</span></a> <span class="p">)</span>
</span><span id="WebMain-52"><a href="#WebMain-52"><span class="linenos"> 52</span></a>
</span><span id="WebMain-53"><a href="#WebMain-53"><span class="linenos"> 53</span></a> <span class="k">def</span> <span class="nf">_init_templates</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="WebMain-54"><a href="#WebMain-54"><span class="linenos"> 54</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">template</span> <span class="o">=</span> <span class="n">Jinja2Templates</span><span class="p">(</span>
</span><span id="WebMain-55"><a href="#WebMain-55"><span class="linenos"> 55</span></a> <span class="n">directory</span><span class="o">=</span><span class="n">TEMPLATE_PATH</span><span class="p">,</span>
</span><span id="WebMain-56"><a href="#WebMain-56"><span class="linenos"> 56</span></a> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">True</span>
</span><span id="WebMain-57"><a href="#WebMain-57"><span class="linenos"> 57</span></a> <span class="p">)</span>
</span><span id="WebMain-58"><a href="#WebMain-58"><span class="linenos"> 58</span></a>
</span><span id="WebMain-59"><a href="#WebMain-59"><span class="linenos"> 59</span></a> <span class="k">def</span> <span class="nf">timestamp2date</span><span class="p">(</span><span class="n">t</span><span class="p">:</span><span class="nb">int</span><span class="o">|</span><span class="n">JinjaUndefined</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="WebMain-60"><a href="#WebMain-60"><span class="linenos"> 60</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">JinjaUndefined</span><span class="p">)</span> \
</span><span id="WebMain-61"><a href="#WebMain-61"><span class="linenos"> 61</span></a> <span class="k">else</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_TIME_FORMAT</span><span class="p">)</span>
</span><span id="WebMain-62"><a href="#WebMain-62"><span class="linenos"> 62</span></a> <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;timestamp2date&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">timestamp2date</span>
</span><span id="WebMain-63"><a href="#WebMain-63"><span class="linenos"> 63</span></a>
</span><span id="WebMain-64"><a href="#WebMain-64"><span class="linenos"> 64</span></a> <span class="k">def</span> <span class="nf">date2timestamp</span><span class="p">(</span><span class="n">d</span><span class="p">:</span><span class="nb">str</span><span class="o">|</span><span class="n">JinjaUndefined</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="o">|</span><span class="nb">str</span><span class="p">:</span>
</span><span id="WebMain-65"><a href="#WebMain-65"><span class="linenos"> 65</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">JinjaUndefined</span><span class="p">)</span> \
</span><span id="WebMain-66"><a href="#WebMain-66"><span class="linenos"> 66</span></a> <span class="k">else</span> <span class="nb">int</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_TIME_FORMAT</span><span class="p">)</span><span class="o">.</span><span class="n">timestamp</span><span class="p">())</span>
</span><span id="WebMain-67"><a href="#WebMain-67"><span class="linenos"> 67</span></a> <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="o">=</span> <span class="n">date2timestamp</span>
</span><span id="WebMain-68"><a href="#WebMain-68"><span class="linenos"> 68</span></a>
</span><span id="WebMain-69"><a href="#WebMain-69"><span class="linenos"> 69</span></a>
</span><span id="WebMain-70"><a href="#WebMain-70"><span class="linenos"> 70</span></a> <span class="k">def</span> <span class="nf">_add_routers</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="WebMain-71"><a href="#WebMain-71"><span class="linenos"> 71</span></a> <span class="n">interface_router</span> <span class="o">=</span> <span class="n">Interface</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
</span><span id="WebMain-72"><a href="#WebMain-72"><span class="linenos"> 72</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">include_router</span><span class="p">(</span><span class="n">interface_router</span><span class="o">.</span><span class="n">router</span><span class="p">)</span>
</span><span id="WebMain-73"><a href="#WebMain-73"><span class="linenos"> 73</span></a>
</span><span id="WebMain-74"><a href="#WebMain-74"><span class="linenos"> 74</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="WebMain-75"><a href="#WebMain-75"><span class="linenos"> 75</span></a>
</span><span id="WebMain-76"><a href="#WebMain-76"><span class="linenos"> 76</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/index&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;Link list&quot;</span><span class="p">)</span>
</span><span id="WebMain-77"><a href="#WebMain-77"><span class="linenos"> 77</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><span id="WebMain-78"><a href="#WebMain-78"><span class="linenos"> 78</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="WebMain-79"><a href="#WebMain-79"><span class="linenos"> 79</span></a> <span class="s1">&#39;index.html&#39;</span><span class="p">,</span>
</span><span id="WebMain-80"><a href="#WebMain-80"><span class="linenos"> 80</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="WebMain-81"><a href="#WebMain-81"><span class="linenos"> 81</span></a> <span class="p">)</span>
</span><span id="WebMain-82"><a href="#WebMain-82"><span class="linenos"> 82</span></a>
</span><span id="WebMain-83"><a href="#WebMain-83"><span class="linenos"> 83</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;/message&quot;</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Send a message to the management&quot;</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;agents&#39;</span><span class="p">])</span>
</span><span id="WebMain-84"><a href="#WebMain-84"><span class="linenos"> 84</span></a> <span class="k">def</span> <span class="nf">message</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="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">,</span> <span class="n">background_tasks</span><span class="p">:</span> <span class="n">BackgroundTasks</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span>
</span><span id="WebMain-85"><a href="#WebMain-85"><span class="linenos"> 85</span></a>
</span><span id="WebMain-86"><a href="#WebMain-86"><span class="linenos"> 86</span></a> <span class="n">receiver</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s1">&#39;host&#39;</span><span class="p">]</span>
</span><span id="WebMain-87"><a href="#WebMain-87"><span class="linenos"> 87</span></a> <span class="k">if</span> <span class="s1">&#39;:&#39;</span> <span class="ow">in</span> <span class="n">receiver</span><span class="p">:</span>
</span><span id="WebMain-88"><a href="#WebMain-88"><span class="linenos"> 88</span></a> <span class="n">receiver</span> <span class="o">=</span> <span class="n">receiver</span><span class="p">[:</span><span class="n">receiver</span><span class="o">.</span><span class="n">rindex</span><span class="p">(</span><span class="s1">&#39;:&#39;</span><span class="p">)]</span>
</span><span id="WebMain-89"><a href="#WebMain-89"><span class="linenos"> 89</span></a>
</span><span id="WebMain-90"><a href="#WebMain-90"><span class="linenos"> 90</span></a> <span class="n">sender</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s1">&#39;x-forwarded-for&#39;</span><span class="p">]</span>
</span><span id="WebMain-91"><a href="#WebMain-91"><span class="linenos"> 91</span></a>
</span><span id="WebMain-92"><a href="#WebMain-92"><span class="linenos"> 92</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg_process</span><span class="o">.</span><span class="n">new_message</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">receiver</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">background_tasks</span><span class="p">)</span>
</span><span id="WebMain-93"><a href="#WebMain-93"><span class="linenos"> 93</span></a>
</span><span id="WebMain-94"><a href="#WebMain-94"><span class="linenos"> 94</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/list&quot;</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Get list of messages (like table)&quot;</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;cli, agents&quot;</span><span class="p">])</span>
</span><span id="WebMain-95"><a href="#WebMain-95"><span class="linenos"> 95</span></a> <span class="k">def</span> <span class="nf">list</span><span class="p">(</span><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="WebMain-96"><a href="#WebMain-96"><span class="linenos"> 96</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 class="n">solution</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="WebMain-97"><a href="#WebMain-97"><span class="linenos"> 97</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</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="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="WebMain-98"><a href="#WebMain-98"><span class="linenos"> 98</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="WebMain-99"><a href="#WebMain-99"><span class="linenos"> 99</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">MessageDbRow</span><span class="p">]:</span>
</span><span id="WebMain-100"><a href="#WebMain-100"><span class="linenos">100</span></a>
</span><span id="WebMain-101"><a href="#WebMain-101"><span class="linenos">101</span></a> <span class="n">db_args</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="WebMain-102"><a href="#WebMain-102"><span class="linenos">102</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="WebMain-103"><a href="#WebMain-103"><span class="linenos">103</span></a> <span class="s2">&quot;offset&quot;</span> <span class="p">:</span> <span class="n">offset</span>
</span><span id="WebMain-104"><a href="#WebMain-104"><span class="linenos">104</span></a> <span class="p">}</span>
</span><span id="WebMain-105"><a href="#WebMain-105"><span class="linenos">105</span></a>
</span><span id="WebMain-106"><a href="#WebMain-106"><span class="linenos">106</span></a> <span class="k">for</span> <span class="n">v</span><span class="p">,</span><span class="n">n</span> <span class="ow">in</span> <span class="p">(</span>
</span><span id="WebMain-107"><a href="#WebMain-107"><span class="linenos">107</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="p">(</span><span class="n">sender</span><span class="p">,</span><span class="s1">&#39;sender&#39;</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><span id="WebMain-108"><a href="#WebMain-108"><span class="linenos">108</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="p">(</span><span class="n">solution</span><span class="p">,</span><span class="s1">&#39;solution&#39;</span><span class="p">),</span>
</span><span id="WebMain-109"><a href="#WebMain-109"><span class="linenos">109</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="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><span id="WebMain-110"><a href="#WebMain-110"><span class="linenos">110</span></a> <span class="p">):</span>
</span><span id="WebMain-111"><a href="#WebMain-111"><span class="linenos">111</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="WebMain-112"><a href="#WebMain-112"><span class="linenos">112</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">v</span>
</span><span id="WebMain-113"><a href="#WebMain-113"><span class="linenos">113</span></a>
</span><span id="WebMain-114"><a href="#WebMain-114"><span class="linenos">114</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">row</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">iterate</span><span class="p">(</span><span class="o">**</span><span class="n">db_args</span><span class="p">)]</span>
</span><span id="WebMain-115"><a href="#WebMain-115"><span class="linenos">115</span></a>
</span><span id="WebMain-116"><a href="#WebMain-116"><span class="linenos">116</span></a> <span class="nd">@self</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;/list/single&quot;</span><span class="p">,</span> <span class="n">summary</span><span class="o">=</span><span class="s2">&quot;Get a single message&quot;</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;cli, agents&quot;</span><span class="p">])</span>
</span><span id="WebMain-117"><a href="#WebMain-117"><span class="linenos">117</span></a> <span class="k">def</span> <span class="nf">status</span><span class="p">(</span><span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="p">:</span>
</span><span id="WebMain-118"><a href="#WebMain-118"><span class="linenos">118</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">by_count</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</span><span id="WebMain-119"><a href="#WebMain-119"><span class="linenos">119</span></a> <span class="k">if</span> <span class="n">msg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="WebMain-120"><a href="#WebMain-120"><span class="linenos">120</span></a> <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">&quot;Message not found&quot;</span><span class="p">)</span>
</span><span id="WebMain-121"><a href="#WebMain-121"><span class="linenos">121</span></a>
</span><span id="WebMain-122"><a href="#WebMain-122"><span class="linenos">122</span></a> <span class="k">return</span> <span class="n">msg</span>
</span></pre></div>

View File

@ -45,10 +45,22 @@
<a class="function" href="#ManagementRequest.__init__">ManagementRequest</a>
</li>
<li>
<a class="variable" href="#ManagementRequest.url">url</a>
<a class="variable" href="#ManagementRequest.MANAGEMENT_URL">MANAGEMENT_URL</a>
</li>
<li>
<a class="function" href="#ManagementRequest.get_status">get_status</a>
<a class="variable" href="#ManagementRequest.allow_lazy">allow_lazy</a>
</li>
<li>
<a class="variable" href="#ManagementRequest.pydantic_context">pydantic_context</a>
</li>
<li>
<a class="function" href="#ManagementRequest.get_message">get_message</a>
</li>
<li>
<a class="function" href="#ManagementRequest.list_messages">list_messages</a>
</li>
<li>
<a class="function" href="#ManagementRequest.total_messages">total_messages</a>
</li>
<li>
<a class="function" href="#ManagementRequest.send_message">send_message</a>
@ -72,56 +84,189 @@
<h1 class="modulename">
<a href="./../../ums.html">ums</a><wbr>.<a href="./../utils.html">utils</a><wbr>.request </h1>
<div class="docstring"><p>Access to the management, e.g., get the list of messages and single messages.
Manually send messages (if necessary, the platforms should do this). </p>
<h3 id="example">Example</h3>
<div class="pdoc-code codehilite">
<pre><span></span><code> <span class="n">m_request</span> <span class="o">=</span> <span class="n">ManagementRequest</span><span class="p">()</span>
<span class="n">m_request</span><span class="o">.</span><span class="n">get_message</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="mi">12</span><span class="p">)</span>
<span class="c1"># MessageDbRow(count=12 sender=&#39;from&#39; recipient=&#39;to&#39; ...</span>
<span class="n">m_request</span><span class="o">.</span><span class="n">list_messages</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="s2">&quot;test&quot;</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="c1"># [</span>
<span class="c1"># MessageDbRow(count=7256, sender=&#39;management&#39;, ...),</span>
<span class="c1"># MessageDbRow(count=7255, sender=&#39;management&#39;, ...),</span>
<span class="c1"># ]</span>
<span class="n">m_request</span><span class="o">.</span><span class="n">total_messages</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="s2">&quot;test&quot;</span><span class="p">)</span>
<span class="c1"># 31</span>
</code></pre>
</div>
<p>See also <code><a href="../example/__main__.html">ums.example.__main__</a></code> and run in Docker via <code>docker compose exec management python -m <a href="../example.html">ums.example</a></code></p>
</div>
<input id="mod-request-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-source-button" for="mod-request-view-source"><span>View Source</span></label>
<div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos"> 1</span></a><span class="c1"># Agenten Plattform</span>
</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a><span class="c1">#</span>
</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="c1"># (c) 2024 Magnus Bender</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="c1"># Institute of Humanities-Centered Artificial Intelligence (CHAI)</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="c1"># Universitaet Hamburg</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="c1"># https://www.chai.uni-hamburg.de/~bender</span>
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="c1"># </span>
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="c1"># source code released under the terms of GNU Public License Version 3</span>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="c1"># https://www.gnu.org/licenses/gpl-3.0.txt</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a>
</span><span id="L-11"><a href="#L-11"><span class="linenos">11</span></a><span class="kn">import</span> <span class="nn">requests</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a>
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="kn">from</span> <span class="nn">ums.utils.types</span> <span class="kn">import</span> <span class="n">AgentMessage</span><span class="p">,</span> <span class="n">AgentResponse</span><span class="p">,</span> <span class="n">MessageDbRow</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a>
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a><span class="k">class</span> <span class="nc">RequestException</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a> <span class="k">pass</span>
</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a>
</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a><span class="k">class</span> <span class="nc">ManagementRequest</span><span class="p">():</span>
</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="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hostname</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">port</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">80</span><span class="p">):</span>
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;http://</span><span class="si">{hostname}</span><span class="s2">:</span><span class="si">{port}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">hostname</span><span class="o">=</span><span class="n">hostname</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="n">port</span><span class="p">)</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">def</span> <span class="nf">get_status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="p">:</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">/status&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">),</span>
</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span> <span class="n">count</span><span class="p">}</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a> <span class="p">)</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a>
</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="k">return</span> <span class="n">MessageDbRow</span><span class="o">.</span><span class="n">model_validate_json</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="k">raise</span> <span class="n">RequestException</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">))</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a>
</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="k">def</span> <span class="nf">send_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span>
</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">/message&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">),</span>
</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="n">data</span><span class="o">=</span><span class="n">message</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">(),</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;accept&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">,</span> <span class="s2">&quot;content-type&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">}</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> <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="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="o">.</span><span class="n">model_validate_json</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos">45</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span><span class="n">count</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">error</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">error_msg</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">))</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos"> 1</span></a><span class="c1"># Agenten Plattform</span>
</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a><span class="c1">#</span>
</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="c1"># (c) 2024 Magnus Bender</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="c1"># Institute of Humanities-Centered Artificial Intelligence (CHAI)</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="c1"># Universitaet Hamburg</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="c1"># https://www.chai.uni-hamburg.de/~bender</span>
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="c1"># </span>
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="c1"># source code released under the terms of GNU Public License Version 3</span>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="c1"># https://www.gnu.org/licenses/gpl-3.0.txt</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a>
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="sd"> Access to the management, e.g., get the list of messages and single messages.</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="sd"> Manually send messages (if necessary, the platforms should do this). </span>
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a>
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="sd"> ### Example</span>
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="sd"> ```python</span>
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a>
</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="sd"> m_request = ManagementRequest()</span>
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="sd"> </span>
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="sd"> m_request.get_message(count=12)</span>
</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="sd"> # MessageDbRow(count=12 sender=&#39;from&#39; recipient=&#39;to&#39; ...</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="sd"> m_request.list_messages(id=&quot;test&quot;, limit=2)</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="sd"> # [</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a><span class="sd"> # MessageDbRow(count=7256, sender=&#39;management&#39;, ...),</span>
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a><span class="sd"> # MessageDbRow(count=7255, sender=&#39;management&#39;, ...),</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a><span class="sd"> # ]</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a>
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a><span class="sd"> m_request.total_messages(id=&quot;test&quot;)</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a><span class="sd"> # 31</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a><span class="sd"> ```</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a><span class="sd"> See also `ums.example.__main__` and run in Docker via ``docker compose exec management python -m ums.example``</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a><span class="sd">&quot;&quot;&quot;</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="kn">import</span> <span class="nn">os</span>
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">List</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Any</span>
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a>
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a><span class="kn">import</span> <span class="nn">requests</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a><span class="kn">from</span> <span class="nn">pydantic</span> <span class="kn">import</span> <span class="n">validate_call</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="kn">from</span> <span class="nn">ums.utils.types</span> <span class="kn">import</span> <span class="n">AgentMessage</span><span class="p">,</span> <span class="n">AgentResponse</span><span class="p">,</span> <span class="n">MessageDbRow</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a><span class="k">class</span> <span class="nc">RequestException</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a><span class="sd"> Raised on http and similar errors.</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="k">pass</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a><span class="k">class</span> <span class="nc">ManagementRequest</span><span class="p">():</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">MANAGEMENT_URL</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;MANAGEMENT_URL&#39;</span><span class="p">,</span> <span class="s1">&#39;http://127.0.0.1:80&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><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="nd">@validate_call</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</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">allow_lazy</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a><span class="sd"> If `allow_lazy` is active, the type checking (by pydantic) is less strict. </span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a><span class="sd"> E.g. it does not require that all files in the data section of messages must exist on the file system.</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">allow_lazy</span> <span class="o">=</span> <span class="n">allow_lazy</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pydantic_context</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;require_file_exists&quot;</span><span class="p">:</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">allow_lazy</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="p">}</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="nd">@validate_call</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="k">def</span> <span class="nf">get_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="p">:</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a><span class="sd"> Get a message (like a table row) from the management by using the `count`.</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">row</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_request</span><span class="p">(</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="s1">&#39;list/single&#39;</span><span class="p">,</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="p">{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span> <span class="n">count</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><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="k">return</span> <span class="n">MessageDbRow</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">row</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">pydantic_context</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><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="nd">@validate_call</span>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">def</span> <span class="nf">list_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</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-83"><a href="#L-83"><span class="linenos"> 83</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 class="n">solution</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-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</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="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">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-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">MessageDbRow</span><span class="p">]:</span>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="sd"> Get the rows in the tables as list of messages.</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="sd"> The arguments are used for filtering.</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</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-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">params</span> <span class="o">=</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="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;self&#39;</span><span class="p">,)</span> <span class="ow">and</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-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">params</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_request</span><span class="p">(</span><span class="s1">&#39;list&#39;</span><span class="p">,</span> <span class="n">params</span><span class="p">)</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">return</span> <span class="p">[</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">MessageDbRow</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">row</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">pydantic_context</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="p">)</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">rows</span>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="p">]</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="nd">@validate_call</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="k">def</span> <span class="nf">total_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</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-110"><a href="#L-110"><span class="linenos">110</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 class="n">solution</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-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</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="kc">None</span><span class="o">=</span><span class="kc">None</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a><span class="sd"> Get the total number of rows in the tables matching the filters.</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</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-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">params</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;self&#39;</span><span class="p">,)</span> <span class="ow">and</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-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">params</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_request</span><span class="p">(</span><span class="s1">&#39;app/table/total&#39;</span><span class="p">,</span> <span class="n">params</span><span class="p">))</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">def</span> <span class="nf">_get_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">params</span><span class="p">:</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]):</span>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">/</span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">MANAGEMENT_URL</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">),</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="p">)</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="k">return</span> <span class="n">r</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">raise</span> <span class="n">RequestException</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span><span class="o">+</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">))</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="nd">@validate_call</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">def</span> <span class="nf">send_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="c1"># TODO</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">pass</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">def</span> <span class="nf">_post_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="c1"># TODO</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">/message&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">),</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">data</span><span class="o">=</span><span class="n">message</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">(),</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;accept&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">,</span> <span class="s2">&quot;content-type&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">}</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="p">)</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="o">.</span><span class="n">model_validate_json</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span><span class="n">count</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">error</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">error_msg</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">))</span>
</span></pre></div>
@ -137,12 +282,15 @@
</div>
<a class="headerlink" href="#RequestException"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="RequestException-16"><a href="#RequestException-16"><span class="linenos">16</span></a><span class="k">class</span> <span class="nc">RequestException</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
</span><span id="RequestException-17"><a href="#RequestException-17"><span class="linenos">17</span></a> <span class="k">pass</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="RequestException-47"><a href="#RequestException-47"><span class="linenos">47</span></a><span class="k">class</span> <span class="nc">RequestException</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
</span><span id="RequestException-48"><a href="#RequestException-48"><span class="linenos">48</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="RequestException-49"><a href="#RequestException-49"><span class="linenos">49</span></a><span class="sd"> Raised on http and similar errors.</span>
</span><span id="RequestException-50"><a href="#RequestException-50"><span class="linenos">50</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="RequestException-51"><a href="#RequestException-51"><span class="linenos">51</span></a> <span class="k">pass</span>
</span></pre></div>
<div class="docstring"><p>Common base class for all non-exit exceptions.</p>
<div class="docstring"><p>Raised on http and similar errors.</p>
</div>
@ -173,34 +321,109 @@
</div>
<a class="headerlink" href="#ManagementRequest"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ManagementRequest-19"><a href="#ManagementRequest-19"><span class="linenos">19</span></a><span class="k">class</span> <span class="nc">ManagementRequest</span><span class="p">():</span>
</span><span id="ManagementRequest-20"><a href="#ManagementRequest-20"><span class="linenos">20</span></a>
</span><span id="ManagementRequest-21"><a href="#ManagementRequest-21"><span class="linenos">21</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">hostname</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">port</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">80</span><span class="p">):</span>
</span><span id="ManagementRequest-22"><a href="#ManagementRequest-22"><span class="linenos">22</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;http://</span><span class="si">{hostname}</span><span class="s2">:</span><span class="si">{port}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">hostname</span><span class="o">=</span><span class="n">hostname</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="n">port</span><span class="p">)</span>
</span><span id="ManagementRequest-23"><a href="#ManagementRequest-23"><span class="linenos">23</span></a>
</span><span id="ManagementRequest-24"><a href="#ManagementRequest-24"><span class="linenos">24</span></a> <span class="k">def</span> <span class="nf">get_status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="p">:</span>
</span><span id="ManagementRequest-25"><a href="#ManagementRequest-25"><span class="linenos">25</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
</span><span id="ManagementRequest-26"><a href="#ManagementRequest-26"><span class="linenos">26</span></a> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">/status&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">),</span>
</span><span id="ManagementRequest-27"><a href="#ManagementRequest-27"><span class="linenos">27</span></a> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span> <span class="n">count</span><span class="p">}</span>
</span><span id="ManagementRequest-28"><a href="#ManagementRequest-28"><span class="linenos">28</span></a> <span class="p">)</span>
</span><span id="ManagementRequest-29"><a href="#ManagementRequest-29"><span class="linenos">29</span></a>
</span><span id="ManagementRequest-30"><a href="#ManagementRequest-30"><span class="linenos">30</span></a> <span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span><span id="ManagementRequest-31"><a href="#ManagementRequest-31"><span class="linenos">31</span></a> <span class="k">return</span> <span class="n">MessageDbRow</span><span class="o">.</span><span class="n">model_validate_json</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="ManagementRequest-32"><a href="#ManagementRequest-32"><span class="linenos">32</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="ManagementRequest-33"><a href="#ManagementRequest-33"><span class="linenos">33</span></a> <span class="k">raise</span> <span class="n">RequestException</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">))</span>
</span><span id="ManagementRequest-34"><a href="#ManagementRequest-34"><span class="linenos">34</span></a>
</span><span id="ManagementRequest-35"><a href="#ManagementRequest-35"><span class="linenos">35</span></a>
</span><span id="ManagementRequest-36"><a href="#ManagementRequest-36"><span class="linenos">36</span></a> <span class="k">def</span> <span class="nf">send_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span>
</span><span id="ManagementRequest-37"><a href="#ManagementRequest-37"><span class="linenos">37</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
</span><span id="ManagementRequest-38"><a href="#ManagementRequest-38"><span class="linenos">38</span></a> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">/message&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">),</span>
</span><span id="ManagementRequest-39"><a href="#ManagementRequest-39"><span class="linenos">39</span></a> <span class="n">data</span><span class="o">=</span><span class="n">message</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">(),</span>
</span><span id="ManagementRequest-40"><a href="#ManagementRequest-40"><span class="linenos">40</span></a> <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;accept&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">,</span> <span class="s2">&quot;content-type&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">}</span>
</span><span id="ManagementRequest-41"><a href="#ManagementRequest-41"><span class="linenos">41</span></a> <span class="p">)</span>
</span><span id="ManagementRequest-42"><a href="#ManagementRequest-42"><span class="linenos">42</span></a>
</span><span id="ManagementRequest-43"><a href="#ManagementRequest-43"><span class="linenos">43</span></a> <span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span><span id="ManagementRequest-44"><a href="#ManagementRequest-44"><span class="linenos">44</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="o">.</span><span class="n">model_validate_json</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="ManagementRequest-45"><a href="#ManagementRequest-45"><span class="linenos">45</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="ManagementRequest-46"><a href="#ManagementRequest-46"><span class="linenos">46</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span><span class="n">count</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">error</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">error_msg</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">))</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="ManagementRequest-53"><a href="#ManagementRequest-53"><span class="linenos"> 53</span></a><span class="k">class</span> <span class="nc">ManagementRequest</span><span class="p">():</span>
</span><span id="ManagementRequest-54"><a href="#ManagementRequest-54"><span class="linenos"> 54</span></a>
</span><span id="ManagementRequest-55"><a href="#ManagementRequest-55"><span class="linenos"> 55</span></a> <span class="n">MANAGEMENT_URL</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;MANAGEMENT_URL&#39;</span><span class="p">,</span> <span class="s1">&#39;http://127.0.0.1:80&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)</span>
</span><span id="ManagementRequest-56"><a href="#ManagementRequest-56"><span class="linenos"> 56</span></a>
</span><span id="ManagementRequest-57"><a href="#ManagementRequest-57"><span class="linenos"> 57</span></a> <span class="nd">@validate_call</span>
</span><span id="ManagementRequest-58"><a href="#ManagementRequest-58"><span class="linenos"> 58</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">allow_lazy</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
</span><span id="ManagementRequest-59"><a href="#ManagementRequest-59"><span class="linenos"> 59</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ManagementRequest-60"><a href="#ManagementRequest-60"><span class="linenos"> 60</span></a><span class="sd"> If `allow_lazy` is active, the type checking (by pydantic) is less strict. </span>
</span><span id="ManagementRequest-61"><a href="#ManagementRequest-61"><span class="linenos"> 61</span></a><span class="sd"> E.g. it does not require that all files in the data section of messages must exist on the file system.</span>
</span><span id="ManagementRequest-62"><a href="#ManagementRequest-62"><span class="linenos"> 62</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ManagementRequest-63"><a href="#ManagementRequest-63"><span class="linenos"> 63</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">allow_lazy</span> <span class="o">=</span> <span class="n">allow_lazy</span>
</span><span id="ManagementRequest-64"><a href="#ManagementRequest-64"><span class="linenos"> 64</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pydantic_context</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ManagementRequest-65"><a href="#ManagementRequest-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;require_file_exists&quot;</span><span class="p">:</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">allow_lazy</span>
</span><span id="ManagementRequest-66"><a href="#ManagementRequest-66"><span class="linenos"> 66</span></a> <span class="p">}</span>
</span><span id="ManagementRequest-67"><a href="#ManagementRequest-67"><span class="linenos"> 67</span></a>
</span><span id="ManagementRequest-68"><a href="#ManagementRequest-68"><span class="linenos"> 68</span></a> <span class="nd">@validate_call</span>
</span><span id="ManagementRequest-69"><a href="#ManagementRequest-69"><span class="linenos"> 69</span></a> <span class="k">def</span> <span class="nf">get_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="p">:</span>
</span><span id="ManagementRequest-70"><a href="#ManagementRequest-70"><span class="linenos"> 70</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ManagementRequest-71"><a href="#ManagementRequest-71"><span class="linenos"> 71</span></a><span class="sd"> Get a message (like a table row) from the management by using the `count`.</span>
</span><span id="ManagementRequest-72"><a href="#ManagementRequest-72"><span class="linenos"> 72</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ManagementRequest-73"><a href="#ManagementRequest-73"><span class="linenos"> 73</span></a> <span class="n">row</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_request</span><span class="p">(</span>
</span><span id="ManagementRequest-74"><a href="#ManagementRequest-74"><span class="linenos"> 74</span></a> <span class="s1">&#39;list/single&#39;</span><span class="p">,</span>
</span><span id="ManagementRequest-75"><a href="#ManagementRequest-75"><span class="linenos"> 75</span></a> <span class="p">{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span> <span class="n">count</span><span class="p">}</span>
</span><span id="ManagementRequest-76"><a href="#ManagementRequest-76"><span class="linenos"> 76</span></a> <span class="p">)</span>
</span><span id="ManagementRequest-77"><a href="#ManagementRequest-77"><span class="linenos"> 77</span></a> <span class="k">return</span> <span class="n">MessageDbRow</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span>
</span><span id="ManagementRequest-78"><a href="#ManagementRequest-78"><span class="linenos"> 78</span></a> <span class="n">row</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">pydantic_context</span>
</span><span id="ManagementRequest-79"><a href="#ManagementRequest-79"><span class="linenos"> 79</span></a> <span class="p">)</span>
</span><span id="ManagementRequest-80"><a href="#ManagementRequest-80"><span class="linenos"> 80</span></a>
</span><span id="ManagementRequest-81"><a href="#ManagementRequest-81"><span class="linenos"> 81</span></a> <span class="nd">@validate_call</span>
</span><span id="ManagementRequest-82"><a href="#ManagementRequest-82"><span class="linenos"> 82</span></a> <span class="k">def</span> <span class="nf">list_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="ManagementRequest-83"><a href="#ManagementRequest-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="ManagementRequest-84"><a href="#ManagementRequest-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 class="n">solution</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="ManagementRequest-85"><a href="#ManagementRequest-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="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="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="ManagementRequest-86"><a href="#ManagementRequest-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="ManagementRequest-87"><a href="#ManagementRequest-87"><span class="linenos"> 87</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">MessageDbRow</span><span class="p">]:</span>
</span><span id="ManagementRequest-88"><a href="#ManagementRequest-88"><span class="linenos"> 88</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ManagementRequest-89"><a href="#ManagementRequest-89"><span class="linenos"> 89</span></a><span class="sd"> Get the rows in the tables as list of messages.</span>
</span><span id="ManagementRequest-90"><a href="#ManagementRequest-90"><span class="linenos"> 90</span></a><span class="sd"> The arguments are used for filtering.</span>
</span><span id="ManagementRequest-91"><a href="#ManagementRequest-91"><span class="linenos"> 91</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ManagementRequest-92"><a href="#ManagementRequest-92"><span class="linenos"> 92</span></a>
</span><span id="ManagementRequest-93"><a href="#ManagementRequest-93"><span class="linenos"> 93</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="ManagementRequest-94"><a href="#ManagementRequest-94"><span class="linenos"> 94</span></a> <span class="n">params</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="ManagementRequest-95"><a href="#ManagementRequest-95"><span class="linenos"> 95</span></a>
</span><span id="ManagementRequest-96"><a href="#ManagementRequest-96"><span class="linenos"> 96</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span id="ManagementRequest-97"><a href="#ManagementRequest-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;self&#39;</span><span class="p">,)</span> <span class="ow">and</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="ManagementRequest-98"><a href="#ManagementRequest-98"><span class="linenos"> 98</span></a> <span class="n">params</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
</span><span id="ManagementRequest-99"><a href="#ManagementRequest-99"><span class="linenos"> 99</span></a>
</span><span id="ManagementRequest-100"><a href="#ManagementRequest-100"><span class="linenos">100</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_request</span><span class="p">(</span><span class="s1">&#39;list&#39;</span><span class="p">,</span> <span class="n">params</span><span class="p">)</span>
</span><span id="ManagementRequest-101"><a href="#ManagementRequest-101"><span class="linenos">101</span></a>
</span><span id="ManagementRequest-102"><a href="#ManagementRequest-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="p">[</span>
</span><span id="ManagementRequest-103"><a href="#ManagementRequest-103"><span class="linenos">103</span></a> <span class="n">MessageDbRow</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span>
</span><span id="ManagementRequest-104"><a href="#ManagementRequest-104"><span class="linenos">104</span></a> <span class="n">row</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">pydantic_context</span>
</span><span id="ManagementRequest-105"><a href="#ManagementRequest-105"><span class="linenos">105</span></a> <span class="p">)</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">rows</span>
</span><span id="ManagementRequest-106"><a href="#ManagementRequest-106"><span class="linenos">106</span></a> <span class="p">]</span>
</span><span id="ManagementRequest-107"><a href="#ManagementRequest-107"><span class="linenos">107</span></a>
</span><span id="ManagementRequest-108"><a href="#ManagementRequest-108"><span class="linenos">108</span></a> <span class="nd">@validate_call</span>
</span><span id="ManagementRequest-109"><a href="#ManagementRequest-109"><span class="linenos">109</span></a> <span class="k">def</span> <span class="nf">total_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="ManagementRequest-110"><a href="#ManagementRequest-110"><span class="linenos">110</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="ManagementRequest-111"><a href="#ManagementRequest-111"><span class="linenos">111</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 class="n">solution</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="ManagementRequest-112"><a href="#ManagementRequest-112"><span class="linenos">112</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</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="kc">None</span><span class="o">=</span><span class="kc">None</span>
</span><span id="ManagementRequest-113"><a href="#ManagementRequest-113"><span class="linenos">113</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="ManagementRequest-114"><a href="#ManagementRequest-114"><span class="linenos">114</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ManagementRequest-115"><a href="#ManagementRequest-115"><span class="linenos">115</span></a><span class="sd"> Get the total number of rows in the tables matching the filters.</span>
</span><span id="ManagementRequest-116"><a href="#ManagementRequest-116"><span class="linenos">116</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ManagementRequest-117"><a href="#ManagementRequest-117"><span class="linenos">117</span></a>
</span><span id="ManagementRequest-118"><a href="#ManagementRequest-118"><span class="linenos">118</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="ManagementRequest-119"><a href="#ManagementRequest-119"><span class="linenos">119</span></a> <span class="n">params</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="ManagementRequest-120"><a href="#ManagementRequest-120"><span class="linenos">120</span></a>
</span><span id="ManagementRequest-121"><a href="#ManagementRequest-121"><span class="linenos">121</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span id="ManagementRequest-122"><a href="#ManagementRequest-122"><span class="linenos">122</span></a> <span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;self&#39;</span><span class="p">,)</span> <span class="ow">and</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="ManagementRequest-123"><a href="#ManagementRequest-123"><span class="linenos">123</span></a> <span class="n">params</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
</span><span id="ManagementRequest-124"><a href="#ManagementRequest-124"><span class="linenos">124</span></a>
</span><span id="ManagementRequest-125"><a href="#ManagementRequest-125"><span class="linenos">125</span></a> <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_request</span><span class="p">(</span><span class="s1">&#39;app/table/total&#39;</span><span class="p">,</span> <span class="n">params</span><span class="p">))</span>
</span><span id="ManagementRequest-126"><a href="#ManagementRequest-126"><span class="linenos">126</span></a>
</span><span id="ManagementRequest-127"><a href="#ManagementRequest-127"><span class="linenos">127</span></a> <span class="k">def</span> <span class="nf">_get_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">params</span><span class="p">:</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]):</span>
</span><span id="ManagementRequest-128"><a href="#ManagementRequest-128"><span class="linenos">128</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
</span><span id="ManagementRequest-129"><a href="#ManagementRequest-129"><span class="linenos">129</span></a> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">/</span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">MANAGEMENT_URL</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">),</span>
</span><span id="ManagementRequest-130"><a href="#ManagementRequest-130"><span class="linenos">130</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span>
</span><span id="ManagementRequest-131"><a href="#ManagementRequest-131"><span class="linenos">131</span></a> <span class="p">)</span>
</span><span id="ManagementRequest-132"><a href="#ManagementRequest-132"><span class="linenos">132</span></a>
</span><span id="ManagementRequest-133"><a href="#ManagementRequest-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span><span id="ManagementRequest-134"><a href="#ManagementRequest-134"><span class="linenos">134</span></a> <span class="k">return</span> <span class="n">r</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</span><span id="ManagementRequest-135"><a href="#ManagementRequest-135"><span class="linenos">135</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="ManagementRequest-136"><a href="#ManagementRequest-136"><span class="linenos">136</span></a> <span class="k">raise</span> <span class="n">RequestException</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span><span class="o">+</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">))</span>
</span><span id="ManagementRequest-137"><a href="#ManagementRequest-137"><span class="linenos">137</span></a>
</span><span id="ManagementRequest-138"><a href="#ManagementRequest-138"><span class="linenos">138</span></a> <span class="nd">@validate_call</span>
</span><span id="ManagementRequest-139"><a href="#ManagementRequest-139"><span class="linenos">139</span></a> <span class="k">def</span> <span class="nf">send_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span>
</span><span id="ManagementRequest-140"><a href="#ManagementRequest-140"><span class="linenos">140</span></a> <span class="c1"># TODO</span>
</span><span id="ManagementRequest-141"><a href="#ManagementRequest-141"><span class="linenos">141</span></a> <span class="k">pass</span>
</span><span id="ManagementRequest-142"><a href="#ManagementRequest-142"><span class="linenos">142</span></a>
</span><span id="ManagementRequest-143"><a href="#ManagementRequest-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">_post_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span>
</span><span id="ManagementRequest-144"><a href="#ManagementRequest-144"><span class="linenos">144</span></a> <span class="c1"># TODO</span>
</span><span id="ManagementRequest-145"><a href="#ManagementRequest-145"><span class="linenos">145</span></a>
</span><span id="ManagementRequest-146"><a href="#ManagementRequest-146"><span class="linenos">146</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
</span><span id="ManagementRequest-147"><a href="#ManagementRequest-147"><span class="linenos">147</span></a> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">/message&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">),</span>
</span><span id="ManagementRequest-148"><a href="#ManagementRequest-148"><span class="linenos">148</span></a> <span class="n">data</span><span class="o">=</span><span class="n">message</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">(),</span>
</span><span id="ManagementRequest-149"><a href="#ManagementRequest-149"><span class="linenos">149</span></a> <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;accept&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">,</span> <span class="s2">&quot;content-type&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">}</span>
</span><span id="ManagementRequest-150"><a href="#ManagementRequest-150"><span class="linenos">150</span></a> <span class="p">)</span>
</span><span id="ManagementRequest-151"><a href="#ManagementRequest-151"><span class="linenos">151</span></a>
</span><span id="ManagementRequest-152"><a href="#ManagementRequest-152"><span class="linenos">152</span></a> <span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span><span id="ManagementRequest-153"><a href="#ManagementRequest-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="o">.</span><span class="n">model_validate_json</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="ManagementRequest-154"><a href="#ManagementRequest-154"><span class="linenos">154</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="ManagementRequest-155"><a href="#ManagementRequest-155"><span class="linenos">155</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span><span class="n">count</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">error</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">error_msg</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">))</span>
</span></pre></div>
@ -209,81 +432,200 @@
<div id="ManagementRequest.__init__" class="classattr">
<input id="ManagementRequest.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">ManagementRequest</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">hostname</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">port</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">80</span></span>)</span>
<div class="decorator">@validate_call</div>
<span class="name">ManagementRequest</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">allow_lazy</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span>)</span>
<label class="view-source-button" for="ManagementRequest.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#ManagementRequest.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ManagementRequest.__init__-21"><a href="#ManagementRequest.__init__-21"><span class="linenos">21</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">hostname</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">port</span><span class="p">:</span><span class="nb">int</span><span class="o">=</span><span class="mi">80</span><span class="p">):</span>
</span><span id="ManagementRequest.__init__-22"><a href="#ManagementRequest.__init__-22"><span class="linenos">22</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;http://</span><span class="si">{hostname}</span><span class="s2">:</span><span class="si">{port}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">hostname</span><span class="o">=</span><span class="n">hostname</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="n">port</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="ManagementRequest.__init__-57"><a href="#ManagementRequest.__init__-57"><span class="linenos">57</span></a> <span class="nd">@validate_call</span>
</span><span id="ManagementRequest.__init__-58"><a href="#ManagementRequest.__init__-58"><span class="linenos">58</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">allow_lazy</span><span class="p">:</span><span class="nb">bool</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
</span><span id="ManagementRequest.__init__-59"><a href="#ManagementRequest.__init__-59"><span class="linenos">59</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ManagementRequest.__init__-60"><a href="#ManagementRequest.__init__-60"><span class="linenos">60</span></a><span class="sd"> If `allow_lazy` is active, the type checking (by pydantic) is less strict. </span>
</span><span id="ManagementRequest.__init__-61"><a href="#ManagementRequest.__init__-61"><span class="linenos">61</span></a><span class="sd"> E.g. it does not require that all files in the data section of messages must exist on the file system.</span>
</span><span id="ManagementRequest.__init__-62"><a href="#ManagementRequest.__init__-62"><span class="linenos">62</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ManagementRequest.__init__-63"><a href="#ManagementRequest.__init__-63"><span class="linenos">63</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">allow_lazy</span> <span class="o">=</span> <span class="n">allow_lazy</span>
</span><span id="ManagementRequest.__init__-64"><a href="#ManagementRequest.__init__-64"><span class="linenos">64</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">pydantic_context</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="ManagementRequest.__init__-65"><a href="#ManagementRequest.__init__-65"><span class="linenos">65</span></a> <span class="s2">&quot;require_file_exists&quot;</span><span class="p">:</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">allow_lazy</span>
</span><span id="ManagementRequest.__init__-66"><a href="#ManagementRequest.__init__-66"><span class="linenos">66</span></a> <span class="p">}</span>
</span></pre></div>
<div class="docstring"><p>If <code><a href="#ManagementRequest.allow_lazy">allow_lazy</a></code> is active, the type checking (by pydantic) is less strict.
E.g. it does not require that all files in the data section of messages must exist on the file system.</p>
</div>
</div>
<div id="ManagementRequest.url" class="classattr">
<div id="ManagementRequest.MANAGEMENT_URL" class="classattr">
<div class="attr variable">
<span class="name">url</span>
<span class="name">MANAGEMENT_URL</span> =
<span class="default_value">&#39;http://127.0.0.1:80&#39;</span>
</div>
<a class="headerlink" href="#ManagementRequest.url"></a>
<a class="headerlink" href="#ManagementRequest.MANAGEMENT_URL"></a>
</div>
<div id="ManagementRequest.get_status" class="classattr">
<input id="ManagementRequest.get_status-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">get_status</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">count</span><span class="p">:</span> <span class="nb">int</span></span><span class="return-annotation">) -> <span class="n"><a href="types.html#MessageDbRow">ums.utils.types.MessageDbRow</a></span>:</span></span>
<div id="ManagementRequest.allow_lazy" class="classattr">
<div class="attr variable">
<span class="name">allow_lazy</span>
<label class="view-source-button" for="ManagementRequest.get_status-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#ManagementRequest.allow_lazy"></a>
</div>
<div id="ManagementRequest.pydantic_context" class="classattr">
<div class="attr variable">
<span class="name">pydantic_context</span>
</div>
<a class="headerlink" href="#ManagementRequest.pydantic_context"></a>
</div>
<div id="ManagementRequest.get_message" class="classattr">
<input id="ManagementRequest.get_message-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<div class="decorator">@validate_call</div>
<span class="def">def</span>
<span class="name">get_message</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">count</span><span class="p">:</span> <span class="nb">int</span></span><span class="return-annotation">) -> <span class="n"><a href="types.html#MessageDbRow">ums.utils.types.MessageDbRow</a></span>:</span></span>
<label class="view-source-button" for="ManagementRequest.get_message-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#ManagementRequest.get_status"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ManagementRequest.get_status-24"><a href="#ManagementRequest.get_status-24"><span class="linenos">24</span></a> <span class="k">def</span> <span class="nf">get_status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="p">:</span>
</span><span id="ManagementRequest.get_status-25"><a href="#ManagementRequest.get_status-25"><span class="linenos">25</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
</span><span id="ManagementRequest.get_status-26"><a href="#ManagementRequest.get_status-26"><span class="linenos">26</span></a> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">/status&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">),</span>
</span><span id="ManagementRequest.get_status-27"><a href="#ManagementRequest.get_status-27"><span class="linenos">27</span></a> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span> <span class="n">count</span><span class="p">}</span>
</span><span id="ManagementRequest.get_status-28"><a href="#ManagementRequest.get_status-28"><span class="linenos">28</span></a> <span class="p">)</span>
</span><span id="ManagementRequest.get_status-29"><a href="#ManagementRequest.get_status-29"><span class="linenos">29</span></a>
</span><span id="ManagementRequest.get_status-30"><a href="#ManagementRequest.get_status-30"><span class="linenos">30</span></a> <span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span><span id="ManagementRequest.get_status-31"><a href="#ManagementRequest.get_status-31"><span class="linenos">31</span></a> <span class="k">return</span> <span class="n">MessageDbRow</span><span class="o">.</span><span class="n">model_validate_json</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="ManagementRequest.get_status-32"><a href="#ManagementRequest.get_status-32"><span class="linenos">32</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="ManagementRequest.get_status-33"><a href="#ManagementRequest.get_status-33"><span class="linenos">33</span></a> <span class="k">raise</span> <span class="n">RequestException</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">))</span>
<a class="headerlink" href="#ManagementRequest.get_message"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ManagementRequest.get_message-68"><a href="#ManagementRequest.get_message-68"><span class="linenos">68</span></a> <span class="nd">@validate_call</span>
</span><span id="ManagementRequest.get_message-69"><a href="#ManagementRequest.get_message-69"><span class="linenos">69</span></a> <span class="k">def</span> <span class="nf">get_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">count</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">MessageDbRow</span><span class="p">:</span>
</span><span id="ManagementRequest.get_message-70"><a href="#ManagementRequest.get_message-70"><span class="linenos">70</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ManagementRequest.get_message-71"><a href="#ManagementRequest.get_message-71"><span class="linenos">71</span></a><span class="sd"> Get a message (like a table row) from the management by using the `count`.</span>
</span><span id="ManagementRequest.get_message-72"><a href="#ManagementRequest.get_message-72"><span class="linenos">72</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ManagementRequest.get_message-73"><a href="#ManagementRequest.get_message-73"><span class="linenos">73</span></a> <span class="n">row</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_request</span><span class="p">(</span>
</span><span id="ManagementRequest.get_message-74"><a href="#ManagementRequest.get_message-74"><span class="linenos">74</span></a> <span class="s1">&#39;list/single&#39;</span><span class="p">,</span>
</span><span id="ManagementRequest.get_message-75"><a href="#ManagementRequest.get_message-75"><span class="linenos">75</span></a> <span class="p">{</span><span class="s2">&quot;count&quot;</span><span class="p">:</span> <span class="n">count</span><span class="p">}</span>
</span><span id="ManagementRequest.get_message-76"><a href="#ManagementRequest.get_message-76"><span class="linenos">76</span></a> <span class="p">)</span>
</span><span id="ManagementRequest.get_message-77"><a href="#ManagementRequest.get_message-77"><span class="linenos">77</span></a> <span class="k">return</span> <span class="n">MessageDbRow</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span>
</span><span id="ManagementRequest.get_message-78"><a href="#ManagementRequest.get_message-78"><span class="linenos">78</span></a> <span class="n">row</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">pydantic_context</span>
</span><span id="ManagementRequest.get_message-79"><a href="#ManagementRequest.get_message-79"><span class="linenos">79</span></a> <span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Get a message (like a table row) from the management by using the <code>count</code>.</p>
</div>
</div>
<div id="ManagementRequest.list_messages" class="classattr">
<input id="ManagementRequest.list_messages-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<div class="decorator">@validate_call</div>
<span class="def">def</span>
<span class="name">list_messages</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <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><span class="param"> <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><span class="param"> <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><span class="param"> <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><span class="param"> <span class="n">solution</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><span class="param"> <span class="n">time_after</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">time_before</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">limit</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">10</span>,</span><span class="param"> <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 class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="n"><a href="types.html#MessageDbRow">ums.utils.types.MessageDbRow</a></span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="ManagementRequest.list_messages-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#ManagementRequest.list_messages"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ManagementRequest.list_messages-81"><a href="#ManagementRequest.list_messages-81"><span class="linenos"> 81</span></a> <span class="nd">@validate_call</span>
</span><span id="ManagementRequest.list_messages-82"><a href="#ManagementRequest.list_messages-82"><span class="linenos"> 82</span></a> <span class="k">def</span> <span class="nf">list_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="ManagementRequest.list_messages-83"><a href="#ManagementRequest.list_messages-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="ManagementRequest.list_messages-84"><a href="#ManagementRequest.list_messages-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 class="n">solution</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="ManagementRequest.list_messages-85"><a href="#ManagementRequest.list_messages-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="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="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="ManagementRequest.list_messages-86"><a href="#ManagementRequest.list_messages-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="ManagementRequest.list_messages-87"><a href="#ManagementRequest.list_messages-87"><span class="linenos"> 87</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">MessageDbRow</span><span class="p">]:</span>
</span><span id="ManagementRequest.list_messages-88"><a href="#ManagementRequest.list_messages-88"><span class="linenos"> 88</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ManagementRequest.list_messages-89"><a href="#ManagementRequest.list_messages-89"><span class="linenos"> 89</span></a><span class="sd"> Get the rows in the tables as list of messages.</span>
</span><span id="ManagementRequest.list_messages-90"><a href="#ManagementRequest.list_messages-90"><span class="linenos"> 90</span></a><span class="sd"> The arguments are used for filtering.</span>
</span><span id="ManagementRequest.list_messages-91"><a href="#ManagementRequest.list_messages-91"><span class="linenos"> 91</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ManagementRequest.list_messages-92"><a href="#ManagementRequest.list_messages-92"><span class="linenos"> 92</span></a>
</span><span id="ManagementRequest.list_messages-93"><a href="#ManagementRequest.list_messages-93"><span class="linenos"> 93</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="ManagementRequest.list_messages-94"><a href="#ManagementRequest.list_messages-94"><span class="linenos"> 94</span></a> <span class="n">params</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="ManagementRequest.list_messages-95"><a href="#ManagementRequest.list_messages-95"><span class="linenos"> 95</span></a>
</span><span id="ManagementRequest.list_messages-96"><a href="#ManagementRequest.list_messages-96"><span class="linenos"> 96</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span id="ManagementRequest.list_messages-97"><a href="#ManagementRequest.list_messages-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;self&#39;</span><span class="p">,)</span> <span class="ow">and</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="ManagementRequest.list_messages-98"><a href="#ManagementRequest.list_messages-98"><span class="linenos"> 98</span></a> <span class="n">params</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
</span><span id="ManagementRequest.list_messages-99"><a href="#ManagementRequest.list_messages-99"><span class="linenos"> 99</span></a>
</span><span id="ManagementRequest.list_messages-100"><a href="#ManagementRequest.list_messages-100"><span class="linenos">100</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_request</span><span class="p">(</span><span class="s1">&#39;list&#39;</span><span class="p">,</span> <span class="n">params</span><span class="p">)</span>
</span><span id="ManagementRequest.list_messages-101"><a href="#ManagementRequest.list_messages-101"><span class="linenos">101</span></a>
</span><span id="ManagementRequest.list_messages-102"><a href="#ManagementRequest.list_messages-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="p">[</span>
</span><span id="ManagementRequest.list_messages-103"><a href="#ManagementRequest.list_messages-103"><span class="linenos">103</span></a> <span class="n">MessageDbRow</span><span class="o">.</span><span class="n">model_validate</span><span class="p">(</span>
</span><span id="ManagementRequest.list_messages-104"><a href="#ManagementRequest.list_messages-104"><span class="linenos">104</span></a> <span class="n">row</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">pydantic_context</span>
</span><span id="ManagementRequest.list_messages-105"><a href="#ManagementRequest.list_messages-105"><span class="linenos">105</span></a> <span class="p">)</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">rows</span>
</span><span id="ManagementRequest.list_messages-106"><a href="#ManagementRequest.list_messages-106"><span class="linenos">106</span></a> <span class="p">]</span>
</span></pre></div>
<div class="docstring"><p>Get the rows in the tables as list of messages.
The arguments are used for filtering.</p>
</div>
</div>
<div id="ManagementRequest.total_messages" class="classattr">
<input id="ManagementRequest.total_messages-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<div class="decorator">@validate_call</div>
<span class="def">def</span>
<span class="name">total_messages</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <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><span class="param"> <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><span class="param"> <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><span class="param"> <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><span class="param"> <span class="n">solution</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><span class="param"> <span class="n">time_after</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">time_before</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="nb">int</span>:</span></span>
<label class="view-source-button" for="ManagementRequest.total_messages-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#ManagementRequest.total_messages"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ManagementRequest.total_messages-108"><a href="#ManagementRequest.total_messages-108"><span class="linenos">108</span></a> <span class="nd">@validate_call</span>
</span><span id="ManagementRequest.total_messages-109"><a href="#ManagementRequest.total_messages-109"><span class="linenos">109</span></a> <span class="k">def</span> <span class="nf">total_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
</span><span id="ManagementRequest.total_messages-110"><a href="#ManagementRequest.total_messages-110"><span class="linenos">110</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="ManagementRequest.total_messages-111"><a href="#ManagementRequest.total_messages-111"><span class="linenos">111</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 class="n">solution</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="ManagementRequest.total_messages-112"><a href="#ManagementRequest.total_messages-112"><span class="linenos">112</span></a> <span class="n">time_after</span><span class="p">:</span><span class="nb">int</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="kc">None</span><span class="o">=</span><span class="kc">None</span>
</span><span id="ManagementRequest.total_messages-113"><a href="#ManagementRequest.total_messages-113"><span class="linenos">113</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span><span id="ManagementRequest.total_messages-114"><a href="#ManagementRequest.total_messages-114"><span class="linenos">114</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="ManagementRequest.total_messages-115"><a href="#ManagementRequest.total_messages-115"><span class="linenos">115</span></a><span class="sd"> Get the total number of rows in the tables matching the filters.</span>
</span><span id="ManagementRequest.total_messages-116"><a href="#ManagementRequest.total_messages-116"><span class="linenos">116</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="ManagementRequest.total_messages-117"><a href="#ManagementRequest.total_messages-117"><span class="linenos">117</span></a>
</span><span id="ManagementRequest.total_messages-118"><a href="#ManagementRequest.total_messages-118"><span class="linenos">118</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="ManagementRequest.total_messages-119"><a href="#ManagementRequest.total_messages-119"><span class="linenos">119</span></a> <span class="n">params</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="ManagementRequest.total_messages-120"><a href="#ManagementRequest.total_messages-120"><span class="linenos">120</span></a>
</span><span id="ManagementRequest.total_messages-121"><a href="#ManagementRequest.total_messages-121"><span class="linenos">121</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span id="ManagementRequest.total_messages-122"><a href="#ManagementRequest.total_messages-122"><span class="linenos">122</span></a> <span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;self&#39;</span><span class="p">,)</span> <span class="ow">and</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="ManagementRequest.total_messages-123"><a href="#ManagementRequest.total_messages-123"><span class="linenos">123</span></a> <span class="n">params</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
</span><span id="ManagementRequest.total_messages-124"><a href="#ManagementRequest.total_messages-124"><span class="linenos">124</span></a>
</span><span id="ManagementRequest.total_messages-125"><a href="#ManagementRequest.total_messages-125"><span class="linenos">125</span></a> <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_request</span><span class="p">(</span><span class="s1">&#39;app/table/total&#39;</span><span class="p">,</span> <span class="n">params</span><span class="p">))</span>
</span></pre></div>
<div class="docstring"><p>Get the total number of rows in the tables matching the filters.</p>
</div>
</div>
<div id="ManagementRequest.send_message" class="classattr">
<input id="ManagementRequest.send_message-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<div class="decorator">@validate_call</div>
<span class="def">def</span>
<span class="name">send_message</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">message</span><span class="p">:</span> <span class="n"><a href="types.html#AgentMessage">ums.utils.types.AgentMessage</a></span></span><span class="return-annotation">) -> <span class="n"><a href="types.html#AgentResponse">ums.utils.types.AgentResponse</a></span>:</span></span>
<span class="name">send_message</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">) -> <span class="n"><a href="types.html#AgentResponse">ums.utils.types.AgentResponse</a></span>:</span></span>
<label class="view-source-button" for="ManagementRequest.send_message-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#ManagementRequest.send_message"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="ManagementRequest.send_message-36"><a href="#ManagementRequest.send_message-36"><span class="linenos">36</span></a> <span class="k">def</span> <span class="nf">send_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span><span class="n">AgentMessage</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span>
</span><span id="ManagementRequest.send_message-37"><a href="#ManagementRequest.send_message-37"><span class="linenos">37</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
</span><span id="ManagementRequest.send_message-38"><a href="#ManagementRequest.send_message-38"><span class="linenos">38</span></a> <span class="s2">&quot;</span><span class="si">{}</span><span class="s2">/message&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">),</span>
</span><span id="ManagementRequest.send_message-39"><a href="#ManagementRequest.send_message-39"><span class="linenos">39</span></a> <span class="n">data</span><span class="o">=</span><span class="n">message</span><span class="o">.</span><span class="n">model_dump_json</span><span class="p">(),</span>
</span><span id="ManagementRequest.send_message-40"><a href="#ManagementRequest.send_message-40"><span class="linenos">40</span></a> <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;accept&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">,</span> <span class="s2">&quot;content-type&quot;</span> <span class="p">:</span> <span class="s2">&quot;application/json&quot;</span><span class="p">}</span>
</span><span id="ManagementRequest.send_message-41"><a href="#ManagementRequest.send_message-41"><span class="linenos">41</span></a> <span class="p">)</span>
</span><span id="ManagementRequest.send_message-42"><a href="#ManagementRequest.send_message-42"><span class="linenos">42</span></a>
</span><span id="ManagementRequest.send_message-43"><a href="#ManagementRequest.send_message-43"><span class="linenos">43</span></a> <span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
</span><span id="ManagementRequest.send_message-44"><a href="#ManagementRequest.send_message-44"><span class="linenos">44</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="o">.</span><span class="n">model_validate_json</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="ManagementRequest.send_message-45"><a href="#ManagementRequest.send_message-45"><span class="linenos">45</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="ManagementRequest.send_message-46"><a href="#ManagementRequest.send_message-46"><span class="linenos">46</span></a> <span class="k">return</span> <span class="n">AgentResponse</span><span class="p">(</span><span class="n">count</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">error</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">error_msg</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">))</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="ManagementRequest.send_message-138"><a href="#ManagementRequest.send_message-138"><span class="linenos">138</span></a> <span class="nd">@validate_call</span>
</span><span id="ManagementRequest.send_message-139"><a href="#ManagementRequest.send_message-139"><span class="linenos">139</span></a> <span class="k">def</span> <span class="nf">send_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AgentResponse</span><span class="p">:</span>
</span><span id="ManagementRequest.send_message-140"><a href="#ManagementRequest.send_message-140"><span class="linenos">140</span></a> <span class="c1"># TODO</span>
</span><span id="ManagementRequest.send_message-141"><a href="#ManagementRequest.send_message-141"><span class="linenos">141</span></a> <span class="k">pass</span>
</span></pre></div>

File diff suppressed because it is too large Load Diff