This commit is contained in:
dceoy
2026-06-27 23:21:20 +00:00
parent 2614ef8f2c
commit 2caed332ff
5 changed files with 2033 additions and 2115 deletions
+117 -195
View File
@@ -801,16 +801,7 @@ views <code>cash_events</code> and <code>positions_reconstructed</code> are deri
<a href="#mt5cli.cli.grafana_schema" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="doc-signature highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">grafana_schema</span><span class="p">(</span>
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="n">ctx</span><span class="p">:</span> <span class="n"><span title="typer.Context">Context</span></span><span class="p">,</span>
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> <span class="n">publish_copy</span><span class="p">:</span> <span class="n"><span title="typing.Annotated">Annotated</span></span><span class="p">[</span>
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a> <span class="n"><span title="pathlib.Path">Path</span></span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a> <span class="n"><span title="typer.Option">Option</span></span><span class="p">(</span>
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a> <span class="s2">&quot;--publish-copy&quot;</span><span class="p">,</span>
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a> <span class="n"><span title="typer.Option(help)">help</span></span><span class="o">=</span><span class="s2">&quot;Publish a Grafana-ready SQLite copy to this path after schema creation.&quot;</span><span class="p">,</span>
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a> <span class="p">),</span>
<a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
<div class="doc-signature highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">grafana_schema</span><span class="p">(</span><span class="n">ctx</span><span class="p">:</span> <span class="n"><span title="typer.Context">Context</span></span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
</code></pre></div>
<div class="doc doc-contents ">
@@ -871,71 +862,33 @@ output. Does not connect to MetaTrader 5.</p>
<span class="normal"><a href="#__codelineno-0-828">828</a></span>
<span class="normal"><a href="#__codelineno-0-829">829</a></span>
<span class="normal"><a href="#__codelineno-0-830">830</a></span>
<span class="normal"><a href="#__codelineno-0-831">831</a></span>
<span class="normal"><a href="#__codelineno-0-832">832</a></span>
<span class="normal"><a href="#__codelineno-0-833">833</a></span>
<span class="normal"><a href="#__codelineno-0-834">834</a></span>
<span class="normal"><a href="#__codelineno-0-835">835</a></span>
<span class="normal"><a href="#__codelineno-0-836">836</a></span>
<span class="normal"><a href="#__codelineno-0-837">837</a></span>
<span class="normal"><a href="#__codelineno-0-838">838</a></span>
<span class="normal"><a href="#__codelineno-0-839">839</a></span>
<span class="normal"><a href="#__codelineno-0-840">840</a></span>
<span class="normal"><a href="#__codelineno-0-841">841</a></span>
<span class="normal"><a href="#__codelineno-0-842">842</a></span>
<span class="normal"><a href="#__codelineno-0-843">843</a></span>
<span class="normal"><a href="#__codelineno-0-844">844</a></span>
<span class="normal"><a href="#__codelineno-0-845">845</a></span>
<span class="normal"><a href="#__codelineno-0-846">846</a></span>
<span class="normal"><a href="#__codelineno-0-847">847</a></span>
<span class="normal"><a href="#__codelineno-0-848">848</a></span>
<span class="normal"><a href="#__codelineno-0-849">849</a></span>
<span class="normal"><a href="#__codelineno-0-850">850</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-805" name="__codelineno-0-805"></a><span class="nd">@app</span><span class="o">.</span><span class="n">command</span><span class="p">(</span><span class="n">rich_help_panel</span><span class="o">=</span><span class="s2">&quot;Collection&quot;</span><span class="p">)</span>
<a id="__codelineno-0-806" name="__codelineno-0-806"></a><span class="k">def</span><span class="w"> </span><span class="nf">grafana_schema</span><span class="p">(</span>
<a id="__codelineno-0-807" name="__codelineno-0-807"></a> <span class="n">ctx</span><span class="p">:</span> <span class="n">typer</span><span class="o">.</span><span class="n">Context</span><span class="p">,</span>
<a id="__codelineno-0-808" name="__codelineno-0-808"></a> <span class="n">publish_copy</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span>
<a id="__codelineno-0-809" name="__codelineno-0-809"></a> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-810" name="__codelineno-0-810"></a> <span class="n">typer</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span>
<a id="__codelineno-0-811" name="__codelineno-0-811"></a> <span class="s2">&quot;--publish-copy&quot;</span><span class="p">,</span>
<a id="__codelineno-0-812" name="__codelineno-0-812"></a> <span class="n">help</span><span class="o">=</span><span class="p">(</span>
<a id="__codelineno-0-813" name="__codelineno-0-813"></a> <span class="s2">&quot;Publish a Grafana-ready SQLite copy to this path&quot;</span>
<a id="__codelineno-0-814" name="__codelineno-0-814"></a> <span class="s2">&quot; after schema creation.&quot;</span>
<a id="__codelineno-0-815" name="__codelineno-0-815"></a> <span class="p">),</span>
<a id="__codelineno-0-816" name="__codelineno-0-816"></a> <span class="p">),</span>
<a id="__codelineno-0-817" name="__codelineno-0-817"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-818" name="__codelineno-0-818"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-819" name="__codelineno-0-819"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Create or refresh Grafana-ready views and indexes in a SQLite database.</span>
<a id="__codelineno-0-820" name="__codelineno-0-820"></a>
<a id="__codelineno-0-821" name="__codelineno-0-821"></a><span class="sd"> Idempotent — safe to run repeatedly on the same database. Requires SQLite</span>
<a id="__codelineno-0-822" name="__codelineno-0-822"></a><span class="sd"> output. Does not connect to MetaTrader 5.</span>
<a id="__codelineno-0-823" name="__codelineno-0-823"></a>
<a id="__codelineno-0-824" name="__codelineno-0-824"></a><span class="sd"> Raises:</span>
<a id="__codelineno-0-825" name="__codelineno-0-825"></a><span class="sd"> typer.BadParameter: If the output format is not SQLite3.</span>
<a id="__codelineno-0-826" name="__codelineno-0-826"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-827" name="__codelineno-0-827"></a> <span class="kn">import</span><span class="w"> </span><span class="nn">sqlite3</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">_sqlite3</span> <span class="c1"># noqa: PLC0415</span>
<a id="__codelineno-0-828" name="__codelineno-0-828"></a>
<a id="__codelineno-0-829" name="__codelineno-0-829"></a> <span class="kn">from</span><span class="w"> </span><span class="nn">.grafana</span><span class="w"> </span><span class="kn">import</span> <span class="p">(</span> <span class="c1"># noqa: PLC0415</span>
<a id="__codelineno-0-830" name="__codelineno-0-830"></a> <span class="n">create_snapshot_tables</span><span class="p">,</span>
<a id="__codelineno-0-831" name="__codelineno-0-831"></a> <span class="n">ensure_grafana_schema</span><span class="p">,</span>
<a id="__codelineno-0-832" name="__codelineno-0-832"></a> <span class="n">publish_grafana_copy</span><span class="p">,</span>
<a id="__codelineno-0-833" name="__codelineno-0-833"></a> <span class="p">)</span>
<a id="__codelineno-0-834" name="__codelineno-0-834"></a>
<a id="__codelineno-0-835" name="__codelineno-0-835"></a> <span class="n">export_ctx</span> <span class="o">=</span> <span class="n">_get_export_context</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
<a id="__codelineno-0-836" name="__codelineno-0-836"></a> <span class="k">if</span> <span class="n">export_ctx</span><span class="o">.</span><span class="n">output_format</span> <span class="o">!=</span> <span class="s2">&quot;sqlite3&quot;</span><span class="p">:</span>
<a id="__codelineno-0-837" name="__codelineno-0-837"></a> <span class="n">msg</span> <span class="o">=</span> <span class="p">(</span>
<a id="__codelineno-0-838" name="__codelineno-0-838"></a> <span class="s2">&quot;grafana-schema requires SQLite3 output.&quot;</span>
<a id="__codelineno-0-839" name="__codelineno-0-839"></a> <span class="s2">&quot; Use a .db/.sqlite/.sqlite3 extension or --format sqlite3.&quot;</span>
<a id="__codelineno-0-840" name="__codelineno-0-840"></a> <span class="p">)</span>
<a id="__codelineno-0-841" name="__codelineno-0-841"></a> <span class="k">raise</span> <span class="n">typer</span><span class="o">.</span><span class="n">BadParameter</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
<a id="__codelineno-0-842" name="__codelineno-0-842"></a> <span class="k">with</span> <span class="n">_sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">export_ctx</span><span class="o">.</span><span class="n">output</span><span class="p">)</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span>
<a id="__codelineno-0-843" name="__codelineno-0-843"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;PRAGMA journal_mode=WAL&quot;</span><span class="p">)</span>
<a id="__codelineno-0-844" name="__codelineno-0-844"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;PRAGMA synchronous=NORMAL&quot;</span><span class="p">)</span>
<a id="__codelineno-0-845" name="__codelineno-0-845"></a> <span class="n">create_snapshot_tables</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
<a id="__codelineno-0-846" name="__codelineno-0-846"></a> <span class="n">ensure_grafana_schema</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
<a id="__codelineno-0-847" name="__codelineno-0-847"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Grafana schema applied to </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">export_ctx</span><span class="o">.</span><span class="n">output</span><span class="p">)</span>
<a id="__codelineno-0-848" name="__codelineno-0-848"></a> <span class="k">if</span> <span class="n">publish_copy</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-849" name="__codelineno-0-849"></a> <span class="n">publish_grafana_copy</span><span class="p">(</span><span class="n">export_ctx</span><span class="o">.</span><span class="n">output</span><span class="p">,</span> <span class="n">publish_copy</span><span class="p">)</span>
<a id="__codelineno-0-850" name="__codelineno-0-850"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Grafana copy published to </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">publish_copy</span><span class="p">)</span>
<span class="normal"><a href="#__codelineno-0-831">831</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-805" name="__codelineno-0-805"></a><span class="nd">@app</span><span class="o">.</span><span class="n">command</span><span class="p">(</span><span class="n">rich_help_panel</span><span class="o">=</span><span class="s2">&quot;Collection&quot;</span><span class="p">)</span>
<a id="__codelineno-0-806" name="__codelineno-0-806"></a><span class="k">def</span><span class="w"> </span><span class="nf">grafana_schema</span><span class="p">(</span><span class="n">ctx</span><span class="p">:</span> <span class="n">typer</span><span class="o">.</span><span class="n">Context</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-807" name="__codelineno-0-807"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Create or refresh Grafana-ready views and indexes in a SQLite database.</span>
<a id="__codelineno-0-808" name="__codelineno-0-808"></a>
<a id="__codelineno-0-809" name="__codelineno-0-809"></a><span class="sd"> Idempotent — safe to run repeatedly on the same database. Requires SQLite</span>
<a id="__codelineno-0-810" name="__codelineno-0-810"></a><span class="sd"> output. Does not connect to MetaTrader 5.</span>
<a id="__codelineno-0-811" name="__codelineno-0-811"></a>
<a id="__codelineno-0-812" name="__codelineno-0-812"></a><span class="sd"> Raises:</span>
<a id="__codelineno-0-813" name="__codelineno-0-813"></a><span class="sd"> typer.BadParameter: If the output format is not SQLite3.</span>
<a id="__codelineno-0-814" name="__codelineno-0-814"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-815" name="__codelineno-0-815"></a> <span class="kn">import</span><span class="w"> </span><span class="nn">sqlite3</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">_sqlite3</span> <span class="c1"># noqa: PLC0415</span>
<a id="__codelineno-0-816" name="__codelineno-0-816"></a>
<a id="__codelineno-0-817" name="__codelineno-0-817"></a> <span class="kn">from</span><span class="w"> </span><span class="nn">.grafana</span><span class="w"> </span><span class="kn">import</span> <span class="n">create_snapshot_tables</span><span class="p">,</span> <span class="n">ensure_grafana_schema</span> <span class="c1"># noqa: PLC0415</span>
<a id="__codelineno-0-818" name="__codelineno-0-818"></a>
<a id="__codelineno-0-819" name="__codelineno-0-819"></a> <span class="n">export_ctx</span> <span class="o">=</span> <span class="n">_get_export_context</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
<a id="__codelineno-0-820" name="__codelineno-0-820"></a> <span class="k">if</span> <span class="n">export_ctx</span><span class="o">.</span><span class="n">output_format</span> <span class="o">!=</span> <span class="s2">&quot;sqlite3&quot;</span><span class="p">:</span>
<a id="__codelineno-0-821" name="__codelineno-0-821"></a> <span class="n">msg</span> <span class="o">=</span> <span class="p">(</span>
<a id="__codelineno-0-822" name="__codelineno-0-822"></a> <span class="s2">&quot;grafana-schema requires SQLite3 output.&quot;</span>
<a id="__codelineno-0-823" name="__codelineno-0-823"></a> <span class="s2">&quot; Use a .db/.sqlite/.sqlite3 extension or --format sqlite3.&quot;</span>
<a id="__codelineno-0-824" name="__codelineno-0-824"></a> <span class="p">)</span>
<a id="__codelineno-0-825" name="__codelineno-0-825"></a> <span class="k">raise</span> <span class="n">typer</span><span class="o">.</span><span class="n">BadParameter</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
<a id="__codelineno-0-826" name="__codelineno-0-826"></a> <span class="k">with</span> <span class="n">_sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">export_ctx</span><span class="o">.</span><span class="n">output</span><span class="p">)</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span>
<a id="__codelineno-0-827" name="__codelineno-0-827"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;PRAGMA journal_mode=WAL&quot;</span><span class="p">)</span>
<a id="__codelineno-0-828" name="__codelineno-0-828"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;PRAGMA synchronous=NORMAL&quot;</span><span class="p">)</span>
<a id="__codelineno-0-829" name="__codelineno-0-829"></a> <span class="n">create_snapshot_tables</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
<a id="__codelineno-0-830" name="__codelineno-0-830"></a> <span class="n">ensure_grafana_schema</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
<a id="__codelineno-0-831" name="__codelineno-0-831"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Grafana schema applied to </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">export_ctx</span><span class="o">.</span><span class="n">output</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
@@ -1315,11 +1268,11 @@ output. Does not connect to MetaTrader 5.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>mt5cli/cli.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-930">930</a></span>
<span class="normal"><a href="#__codelineno-0-931">931</a></span>
<span class="normal"><a href="#__codelineno-0-932">932</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-930" name="__codelineno-0-930"></a><span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-931" name="__codelineno-0-931"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Run the mt5cli CLI.&quot;&quot;&quot;</span>
<a id="__codelineno-0-932" name="__codelineno-0-932"></a> <span class="n">app</span><span class="p">()</span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-899">899</a></span>
<span class="normal"><a href="#__codelineno-0-900">900</a></span>
<span class="normal"><a href="#__codelineno-0-901">901</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-899" name="__codelineno-0-899"></a><span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-900" name="__codelineno-0-900"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Run the mt5cli CLI.&quot;&quot;&quot;</span>
<a id="__codelineno-0-901" name="__codelineno-0-901"></a> <span class="n">app</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
@@ -2178,14 +2131,7 @@ with no additional validation beyond what MT5 itself performs. Use
<a id="__codelineno-0-43" name="__codelineno-0-43" href="#__codelineno-0-43"></a> <span class="n"><span title="typer.Option(help)">help</span></span><span class="o">=</span><span class="s2">&quot;Ensure Grafana views and indexes exist.&quot;</span><span class="p">,</span>
<a id="__codelineno-0-44" name="__codelineno-0-44" href="#__codelineno-0-44"></a> <span class="p">),</span>
<a id="__codelineno-0-45" name="__codelineno-0-45" href="#__codelineno-0-45"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<a id="__codelineno-0-46" name="__codelineno-0-46" href="#__codelineno-0-46"></a> <span class="n">publish_copy</span><span class="p">:</span> <span class="n"><span title="typing.Annotated">Annotated</span></span><span class="p">[</span>
<a id="__codelineno-0-47" name="__codelineno-0-47" href="#__codelineno-0-47"></a> <span class="n"><span title="pathlib.Path">Path</span></span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-48" name="__codelineno-0-48" href="#__codelineno-0-48"></a> <span class="n"><span title="typer.Option">Option</span></span><span class="p">(</span>
<a id="__codelineno-0-49" name="__codelineno-0-49" href="#__codelineno-0-49"></a> <span class="s2">&quot;--publish-copy&quot;</span><span class="p">,</span>
<a id="__codelineno-0-50" name="__codelineno-0-50" href="#__codelineno-0-50"></a> <span class="n"><span title="typer.Option(help)">help</span></span><span class="o">=</span><span class="s2">&quot;Publish a Grafana-ready SQLite copy to this path after snapshot.&quot;</span><span class="p">,</span>
<a id="__codelineno-0-51" name="__codelineno-0-51" href="#__codelineno-0-51"></a> <span class="p">),</span>
<a id="__codelineno-0-52" name="__codelineno-0-52" href="#__codelineno-0-52"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-53" name="__codelineno-0-53" href="#__codelineno-0-53"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
<a id="__codelineno-0-46" name="__codelineno-0-46" href="#__codelineno-0-46"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span>
</code></pre></div>
<div class="doc doc-contents ">
@@ -2220,7 +2166,26 @@ orders or modifies trading state.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>mt5cli/cli.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-853">853</a></span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-834">834</a></span>
<span class="normal"><a href="#__codelineno-0-835">835</a></span>
<span class="normal"><a href="#__codelineno-0-836">836</a></span>
<span class="normal"><a href="#__codelineno-0-837">837</a></span>
<span class="normal"><a href="#__codelineno-0-838">838</a></span>
<span class="normal"><a href="#__codelineno-0-839">839</a></span>
<span class="normal"><a href="#__codelineno-0-840">840</a></span>
<span class="normal"><a href="#__codelineno-0-841">841</a></span>
<span class="normal"><a href="#__codelineno-0-842">842</a></span>
<span class="normal"><a href="#__codelineno-0-843">843</a></span>
<span class="normal"><a href="#__codelineno-0-844">844</a></span>
<span class="normal"><a href="#__codelineno-0-845">845</a></span>
<span class="normal"><a href="#__codelineno-0-846">846</a></span>
<span class="normal"><a href="#__codelineno-0-847">847</a></span>
<span class="normal"><a href="#__codelineno-0-848">848</a></span>
<span class="normal"><a href="#__codelineno-0-849">849</a></span>
<span class="normal"><a href="#__codelineno-0-850">850</a></span>
<span class="normal"><a href="#__codelineno-0-851">851</a></span>
<span class="normal"><a href="#__codelineno-0-852">852</a></span>
<span class="normal"><a href="#__codelineno-0-853">853</a></span>
<span class="normal"><a href="#__codelineno-0-854">854</a></span>
<span class="normal"><a href="#__codelineno-0-855">855</a></span>
<span class="normal"><a href="#__codelineno-0-856">856</a></span>
@@ -2263,112 +2228,69 @@ orders or modifies trading state.</p>
<span class="normal"><a href="#__codelineno-0-893">893</a></span>
<span class="normal"><a href="#__codelineno-0-894">894</a></span>
<span class="normal"><a href="#__codelineno-0-895">895</a></span>
<span class="normal"><a href="#__codelineno-0-896">896</a></span>
<span class="normal"><a href="#__codelineno-0-897">897</a></span>
<span class="normal"><a href="#__codelineno-0-898">898</a></span>
<span class="normal"><a href="#__codelineno-0-899">899</a></span>
<span class="normal"><a href="#__codelineno-0-900">900</a></span>
<span class="normal"><a href="#__codelineno-0-901">901</a></span>
<span class="normal"><a href="#__codelineno-0-902">902</a></span>
<span class="normal"><a href="#__codelineno-0-903">903</a></span>
<span class="normal"><a href="#__codelineno-0-904">904</a></span>
<span class="normal"><a href="#__codelineno-0-905">905</a></span>
<span class="normal"><a href="#__codelineno-0-906">906</a></span>
<span class="normal"><a href="#__codelineno-0-907">907</a></span>
<span class="normal"><a href="#__codelineno-0-908">908</a></span>
<span class="normal"><a href="#__codelineno-0-909">909</a></span>
<span class="normal"><a href="#__codelineno-0-910">910</a></span>
<span class="normal"><a href="#__codelineno-0-911">911</a></span>
<span class="normal"><a href="#__codelineno-0-912">912</a></span>
<span class="normal"><a href="#__codelineno-0-913">913</a></span>
<span class="normal"><a href="#__codelineno-0-914">914</a></span>
<span class="normal"><a href="#__codelineno-0-915">915</a></span>
<span class="normal"><a href="#__codelineno-0-916">916</a></span>
<span class="normal"><a href="#__codelineno-0-917">917</a></span>
<span class="normal"><a href="#__codelineno-0-918">918</a></span>
<span class="normal"><a href="#__codelineno-0-919">919</a></span>
<span class="normal"><a href="#__codelineno-0-920">920</a></span>
<span class="normal"><a href="#__codelineno-0-921">921</a></span>
<span class="normal"><a href="#__codelineno-0-922">922</a></span>
<span class="normal"><a href="#__codelineno-0-923">923</a></span>
<span class="normal"><a href="#__codelineno-0-924">924</a></span>
<span class="normal"><a href="#__codelineno-0-925">925</a></span>
<span class="normal"><a href="#__codelineno-0-926">926</a></span>
<span class="normal"><a href="#__codelineno-0-927">927</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-853" name="__codelineno-0-853"></a><span class="nd">@app</span><span class="o">.</span><span class="n">command</span><span class="p">(</span><span class="n">rich_help_panel</span><span class="o">=</span><span class="s2">&quot;Collection&quot;</span><span class="p">)</span>
<a id="__codelineno-0-854" name="__codelineno-0-854"></a><span class="k">def</span><span class="w"> </span><span class="nf">snapshot</span><span class="p">(</span>
<a id="__codelineno-0-855" name="__codelineno-0-855"></a> <span class="n">ctx</span><span class="p">:</span> <span class="n">typer</span><span class="o">.</span><span class="n">Context</span><span class="p">,</span>
<a id="__codelineno-0-856" name="__codelineno-0-856"></a> <span class="n">symbol</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span>
<a id="__codelineno-0-857" name="__codelineno-0-857"></a> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-858" name="__codelineno-0-858"></a> <span class="n">typer</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span>
<a id="__codelineno-0-859" name="__codelineno-0-859"></a> <span class="s2">&quot;--symbol&quot;</span><span class="p">,</span>
<a id="__codelineno-0-860" name="__codelineno-0-860"></a> <span class="s2">&quot;-s&quot;</span><span class="p">,</span>
<a id="__codelineno-0-861" name="__codelineno-0-861"></a> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Symbol filter for positions/orders (repeat for multiple).&quot;</span><span class="p">,</span>
<a id="__codelineno-0-862" name="__codelineno-0-862"></a> <span class="p">),</span>
<a id="__codelineno-0-863" name="__codelineno-0-863"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-864" name="__codelineno-0-864"></a> <span class="n">with_account</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span>
<a id="__codelineno-0-865" name="__codelineno-0-865"></a> <span class="nb">bool</span><span class="p">,</span>
<a id="__codelineno-0-866" name="__codelineno-0-866"></a> <span class="n">typer</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span><span class="s2">&quot;--with-account/--no-account&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Snapshot account info.&quot;</span><span class="p">),</span>
<a id="__codelineno-0-867" name="__codelineno-0-867"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
<a id="__codelineno-0-868" name="__codelineno-0-868"></a> <span class="n">with_positions</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span>
<a id="__codelineno-0-869" name="__codelineno-0-869"></a> <span class="nb">bool</span><span class="p">,</span>
<a id="__codelineno-0-870" name="__codelineno-0-870"></a> <span class="n">typer</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span>
<a id="__codelineno-0-871" name="__codelineno-0-871"></a> <span class="s2">&quot;--with-positions/--no-positions&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Snapshot open positions.&quot;</span>
<a id="__codelineno-0-872" name="__codelineno-0-872"></a> <span class="p">),</span>
<a id="__codelineno-0-873" name="__codelineno-0-873"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
<a id="__codelineno-0-874" name="__codelineno-0-874"></a> <span class="n">with_orders</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span>
<a id="__codelineno-0-875" name="__codelineno-0-875"></a> <span class="nb">bool</span><span class="p">,</span>
<a id="__codelineno-0-876" name="__codelineno-0-876"></a> <span class="n">typer</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span><span class="s2">&quot;--with-orders/--no-orders&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Snapshot active orders.&quot;</span><span class="p">),</span>
<a id="__codelineno-0-877" name="__codelineno-0-877"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
<a id="__codelineno-0-878" name="__codelineno-0-878"></a> <span class="n">with_terminal</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span>
<a id="__codelineno-0-879" name="__codelineno-0-879"></a> <span class="nb">bool</span><span class="p">,</span>
<a id="__codelineno-0-880" name="__codelineno-0-880"></a> <span class="n">typer</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span><span class="s2">&quot;--with-terminal/--no-terminal&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Snapshot terminal info.&quot;</span><span class="p">),</span>
<a id="__codelineno-0-881" name="__codelineno-0-881"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
<a id="__codelineno-0-882" name="__codelineno-0-882"></a> <span class="n">with_grafana_schema</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span>
<a id="__codelineno-0-883" name="__codelineno-0-883"></a> <span class="nb">bool</span><span class="p">,</span>
<a id="__codelineno-0-884" name="__codelineno-0-884"></a> <span class="n">typer</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span>
<a id="__codelineno-0-885" name="__codelineno-0-885"></a> <span class="s2">&quot;--with-grafana-schema/--no-grafana-schema&quot;</span><span class="p">,</span>
<a id="__codelineno-0-886" name="__codelineno-0-886"></a> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Ensure Grafana views and indexes exist.&quot;</span><span class="p">,</span>
<a id="__codelineno-0-887" name="__codelineno-0-887"></a> <span class="p">),</span>
<a id="__codelineno-0-888" name="__codelineno-0-888"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<a id="__codelineno-0-889" name="__codelineno-0-889"></a> <span class="n">publish_copy</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span>
<a id="__codelineno-0-890" name="__codelineno-0-890"></a> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-891" name="__codelineno-0-891"></a> <span class="n">typer</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span>
<a id="__codelineno-0-892" name="__codelineno-0-892"></a> <span class="s2">&quot;--publish-copy&quot;</span><span class="p">,</span>
<a id="__codelineno-0-893" name="__codelineno-0-893"></a> <span class="n">help</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;Publish a Grafana-ready SQLite copy to this path after snapshot.&quot;</span><span class="p">),</span>
<a id="__codelineno-0-894" name="__codelineno-0-894"></a> <span class="p">),</span>
<a id="__codelineno-0-895" name="__codelineno-0-895"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-896" name="__codelineno-0-896"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-897" name="__codelineno-0-897"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Snapshot current account, position, order, and terminal state into SQLite.</span>
<a id="__codelineno-0-898" name="__codelineno-0-898"></a>
<a id="__codelineno-0-899" name="__codelineno-0-899"></a><span class="sd"> Appends a timestamped snapshot row for each data type. Never places</span>
<a id="__codelineno-0-900" name="__codelineno-0-900"></a><span class="sd"> orders or modifies trading state.</span>
<a id="__codelineno-0-901" name="__codelineno-0-901"></a>
<a id="__codelineno-0-902" name="__codelineno-0-902"></a><span class="sd"> Raises:</span>
<a id="__codelineno-0-903" name="__codelineno-0-903"></a><span class="sd"> typer.BadParameter: If the output format is not SQLite3.</span>
<a id="__codelineno-0-904" name="__codelineno-0-904"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-905" name="__codelineno-0-905"></a> <span class="n">export_ctx</span> <span class="o">=</span> <span class="n">_get_export_context</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
<a id="__codelineno-0-906" name="__codelineno-0-906"></a> <span class="k">if</span> <span class="n">export_ctx</span><span class="o">.</span><span class="n">output_format</span> <span class="o">!=</span> <span class="s2">&quot;sqlite3&quot;</span><span class="p">:</span>
<a id="__codelineno-0-907" name="__codelineno-0-907"></a> <span class="n">msg</span> <span class="o">=</span> <span class="p">(</span>
<a id="__codelineno-0-908" name="__codelineno-0-908"></a> <span class="s2">&quot;snapshot requires SQLite3 output.&quot;</span>
<a id="__codelineno-0-909" name="__codelineno-0-909"></a> <span class="s2">&quot; Use a .db/.sqlite/.sqlite3 extension or --format sqlite3.&quot;</span>
<a id="__codelineno-0-910" name="__codelineno-0-910"></a> <span class="p">)</span>
<a id="__codelineno-0-911" name="__codelineno-0-911"></a> <span class="k">raise</span> <span class="n">typer</span><span class="o">.</span><span class="n">BadParameter</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
<a id="__codelineno-0-912" name="__codelineno-0-912"></a> <span class="n">sdk</span><span class="o">.</span><span class="n">update_observability_with_config</span><span class="p">(</span>
<a id="__codelineno-0-913" name="__codelineno-0-913"></a> <span class="n">output</span><span class="o">=</span><span class="n">export_ctx</span><span class="o">.</span><span class="n">output</span><span class="p">,</span>
<a id="__codelineno-0-914" name="__codelineno-0-914"></a> <span class="n">config</span><span class="o">=</span><span class="n">export_ctx</span><span class="o">.</span><span class="n">config</span><span class="p">,</span>
<a id="__codelineno-0-915" name="__codelineno-0-915"></a> <span class="n">symbols</span><span class="o">=</span><span class="nb">list</span><span class="p">(</span><span class="n">symbol</span><span class="p">)</span> <span class="k">if</span> <span class="n">symbol</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-916" name="__codelineno-0-916"></a> <span class="n">include_account</span><span class="o">=</span><span class="n">with_account</span><span class="p">,</span>
<a id="__codelineno-0-917" name="__codelineno-0-917"></a> <span class="n">include_positions</span><span class="o">=</span><span class="n">with_positions</span><span class="p">,</span>
<a id="__codelineno-0-918" name="__codelineno-0-918"></a> <span class="n">include_orders</span><span class="o">=</span><span class="n">with_orders</span><span class="p">,</span>
<a id="__codelineno-0-919" name="__codelineno-0-919"></a> <span class="n">include_terminal</span><span class="o">=</span><span class="n">with_terminal</span><span class="p">,</span>
<a id="__codelineno-0-920" name="__codelineno-0-920"></a> <span class="n">with_grafana_schema</span><span class="o">=</span><span class="n">with_grafana_schema</span><span class="p">,</span>
<a id="__codelineno-0-921" name="__codelineno-0-921"></a> <span class="p">)</span>
<a id="__codelineno-0-922" name="__codelineno-0-922"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Snapshot written to </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">export_ctx</span><span class="o">.</span><span class="n">output</span><span class="p">)</span>
<a id="__codelineno-0-923" name="__codelineno-0-923"></a> <span class="k">if</span> <span class="n">publish_copy</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-924" name="__codelineno-0-924"></a> <span class="kn">from</span><span class="w"> </span><span class="nn">.grafana</span><span class="w"> </span><span class="kn">import</span> <span class="n">publish_grafana_copy</span> <span class="c1"># noqa: PLC0415</span>
<a id="__codelineno-0-925" name="__codelineno-0-925"></a>
<a id="__codelineno-0-926" name="__codelineno-0-926"></a> <span class="n">publish_grafana_copy</span><span class="p">(</span><span class="n">export_ctx</span><span class="o">.</span><span class="n">output</span><span class="p">,</span> <span class="n">publish_copy</span><span class="p">)</span>
<a id="__codelineno-0-927" name="__codelineno-0-927"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Grafana copy published to </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">publish_copy</span><span class="p">)</span>
<span class="normal"><a href="#__codelineno-0-896">896</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-834" name="__codelineno-0-834"></a><span class="nd">@app</span><span class="o">.</span><span class="n">command</span><span class="p">(</span><span class="n">rich_help_panel</span><span class="o">=</span><span class="s2">&quot;Collection&quot;</span><span class="p">)</span>
<a id="__codelineno-0-835" name="__codelineno-0-835"></a><span class="k">def</span><span class="w"> </span><span class="nf">snapshot</span><span class="p">(</span>
<a id="__codelineno-0-836" name="__codelineno-0-836"></a> <span class="n">ctx</span><span class="p">:</span> <span class="n">typer</span><span class="o">.</span><span class="n">Context</span><span class="p">,</span>
<a id="__codelineno-0-837" name="__codelineno-0-837"></a> <span class="n">symbol</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span>
<a id="__codelineno-0-838" name="__codelineno-0-838"></a> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-839" name="__codelineno-0-839"></a> <span class="n">typer</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span>
<a id="__codelineno-0-840" name="__codelineno-0-840"></a> <span class="s2">&quot;--symbol&quot;</span><span class="p">,</span>
<a id="__codelineno-0-841" name="__codelineno-0-841"></a> <span class="s2">&quot;-s&quot;</span><span class="p">,</span>
<a id="__codelineno-0-842" name="__codelineno-0-842"></a> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Symbol filter for positions/orders (repeat for multiple).&quot;</span><span class="p">,</span>
<a id="__codelineno-0-843" name="__codelineno-0-843"></a> <span class="p">),</span>
<a id="__codelineno-0-844" name="__codelineno-0-844"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-845" name="__codelineno-0-845"></a> <span class="n">with_account</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span>
<a id="__codelineno-0-846" name="__codelineno-0-846"></a> <span class="nb">bool</span><span class="p">,</span>
<a id="__codelineno-0-847" name="__codelineno-0-847"></a> <span class="n">typer</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span><span class="s2">&quot;--with-account/--no-account&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Snapshot account info.&quot;</span><span class="p">),</span>
<a id="__codelineno-0-848" name="__codelineno-0-848"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
<a id="__codelineno-0-849" name="__codelineno-0-849"></a> <span class="n">with_positions</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span>
<a id="__codelineno-0-850" name="__codelineno-0-850"></a> <span class="nb">bool</span><span class="p">,</span>
<a id="__codelineno-0-851" name="__codelineno-0-851"></a> <span class="n">typer</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span>
<a id="__codelineno-0-852" name="__codelineno-0-852"></a> <span class="s2">&quot;--with-positions/--no-positions&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Snapshot open positions.&quot;</span>
<a id="__codelineno-0-853" name="__codelineno-0-853"></a> <span class="p">),</span>
<a id="__codelineno-0-854" name="__codelineno-0-854"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
<a id="__codelineno-0-855" name="__codelineno-0-855"></a> <span class="n">with_orders</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span>
<a id="__codelineno-0-856" name="__codelineno-0-856"></a> <span class="nb">bool</span><span class="p">,</span>
<a id="__codelineno-0-857" name="__codelineno-0-857"></a> <span class="n">typer</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span><span class="s2">&quot;--with-orders/--no-orders&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Snapshot active orders.&quot;</span><span class="p">),</span>
<a id="__codelineno-0-858" name="__codelineno-0-858"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
<a id="__codelineno-0-859" name="__codelineno-0-859"></a> <span class="n">with_terminal</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span>
<a id="__codelineno-0-860" name="__codelineno-0-860"></a> <span class="nb">bool</span><span class="p">,</span>
<a id="__codelineno-0-861" name="__codelineno-0-861"></a> <span class="n">typer</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span><span class="s2">&quot;--with-terminal/--no-terminal&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Snapshot terminal info.&quot;</span><span class="p">),</span>
<a id="__codelineno-0-862" name="__codelineno-0-862"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
<a id="__codelineno-0-863" name="__codelineno-0-863"></a> <span class="n">with_grafana_schema</span><span class="p">:</span> <span class="n">Annotated</span><span class="p">[</span>
<a id="__codelineno-0-864" name="__codelineno-0-864"></a> <span class="nb">bool</span><span class="p">,</span>
<a id="__codelineno-0-865" name="__codelineno-0-865"></a> <span class="n">typer</span><span class="o">.</span><span class="n">Option</span><span class="p">(</span>
<a id="__codelineno-0-866" name="__codelineno-0-866"></a> <span class="s2">&quot;--with-grafana-schema/--no-grafana-schema&quot;</span><span class="p">,</span>
<a id="__codelineno-0-867" name="__codelineno-0-867"></a> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Ensure Grafana views and indexes exist.&quot;</span><span class="p">,</span>
<a id="__codelineno-0-868" name="__codelineno-0-868"></a> <span class="p">),</span>
<a id="__codelineno-0-869" name="__codelineno-0-869"></a> <span class="p">]</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<a id="__codelineno-0-870" name="__codelineno-0-870"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-871" name="__codelineno-0-871"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Snapshot current account, position, order, and terminal state into SQLite.</span>
<a id="__codelineno-0-872" name="__codelineno-0-872"></a>
<a id="__codelineno-0-873" name="__codelineno-0-873"></a><span class="sd"> Appends a timestamped snapshot row for each data type. Never places</span>
<a id="__codelineno-0-874" name="__codelineno-0-874"></a><span class="sd"> orders or modifies trading state.</span>
<a id="__codelineno-0-875" name="__codelineno-0-875"></a>
<a id="__codelineno-0-876" name="__codelineno-0-876"></a><span class="sd"> Raises:</span>
<a id="__codelineno-0-877" name="__codelineno-0-877"></a><span class="sd"> typer.BadParameter: If the output format is not SQLite3.</span>
<a id="__codelineno-0-878" name="__codelineno-0-878"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-879" name="__codelineno-0-879"></a> <span class="n">export_ctx</span> <span class="o">=</span> <span class="n">_get_export_context</span><span class="p">(</span><span class="n">ctx</span><span class="p">)</span>
<a id="__codelineno-0-880" name="__codelineno-0-880"></a> <span class="k">if</span> <span class="n">export_ctx</span><span class="o">.</span><span class="n">output_format</span> <span class="o">!=</span> <span class="s2">&quot;sqlite3&quot;</span><span class="p">:</span>
<a id="__codelineno-0-881" name="__codelineno-0-881"></a> <span class="n">msg</span> <span class="o">=</span> <span class="p">(</span>
<a id="__codelineno-0-882" name="__codelineno-0-882"></a> <span class="s2">&quot;snapshot requires SQLite3 output.&quot;</span>
<a id="__codelineno-0-883" name="__codelineno-0-883"></a> <span class="s2">&quot; Use a .db/.sqlite/.sqlite3 extension or --format sqlite3.&quot;</span>
<a id="__codelineno-0-884" name="__codelineno-0-884"></a> <span class="p">)</span>
<a id="__codelineno-0-885" name="__codelineno-0-885"></a> <span class="k">raise</span> <span class="n">typer</span><span class="o">.</span><span class="n">BadParameter</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
<a id="__codelineno-0-886" name="__codelineno-0-886"></a> <span class="n">sdk</span><span class="o">.</span><span class="n">update_observability_with_config</span><span class="p">(</span>
<a id="__codelineno-0-887" name="__codelineno-0-887"></a> <span class="n">output</span><span class="o">=</span><span class="n">export_ctx</span><span class="o">.</span><span class="n">output</span><span class="p">,</span>
<a id="__codelineno-0-888" name="__codelineno-0-888"></a> <span class="n">config</span><span class="o">=</span><span class="n">export_ctx</span><span class="o">.</span><span class="n">config</span><span class="p">,</span>
<a id="__codelineno-0-889" name="__codelineno-0-889"></a> <span class="n">symbols</span><span class="o">=</span><span class="nb">list</span><span class="p">(</span><span class="n">symbol</span><span class="p">)</span> <span class="k">if</span> <span class="n">symbol</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-890" name="__codelineno-0-890"></a> <span class="n">include_account</span><span class="o">=</span><span class="n">with_account</span><span class="p">,</span>
<a id="__codelineno-0-891" name="__codelineno-0-891"></a> <span class="n">include_positions</span><span class="o">=</span><span class="n">with_positions</span><span class="p">,</span>
<a id="__codelineno-0-892" name="__codelineno-0-892"></a> <span class="n">include_orders</span><span class="o">=</span><span class="n">with_orders</span><span class="p">,</span>
<a id="__codelineno-0-893" name="__codelineno-0-893"></a> <span class="n">include_terminal</span><span class="o">=</span><span class="n">with_terminal</span><span class="p">,</span>
<a id="__codelineno-0-894" name="__codelineno-0-894"></a> <span class="n">with_grafana_schema</span><span class="o">=</span><span class="n">with_grafana_schema</span><span class="p">,</span>
<a id="__codelineno-0-895" name="__codelineno-0-895"></a> <span class="p">)</span>
<a id="__codelineno-0-896" name="__codelineno-0-896"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Snapshot written to </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">export_ctx</span><span class="o">.</span><span class="n">output</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>