deploy: 668f38d8aa
This commit is contained in:
+125
-125
@@ -1603,7 +1603,9 @@ a symbol such as <code>EURUSD_M1</code> cannot collide with <code>EURUSD</code>
|
||||
|
||||
<details class="mkdocstrings-source">
|
||||
<summary>Source code in <code>mt5cli/utils.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-216">216</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-214">214</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-215">215</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-216">216</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-217">217</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-218">218</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-219">219</a></span>
|
||||
@@ -1626,34 +1628,32 @@ a symbol such as <code>EURUSD_M1</code> cannot collide with <code>EURUSD</code>
|
||||
<span class="normal"><a href="#__codelineno-0-236">236</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-237">237</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-238">238</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-239">239</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-240">240</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-241">241</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-216" name="__codelineno-0-216"></a><span class="k">def</span><span class="w"> </span><span class="nf">detect_format</span><span class="p">(</span>
|
||||
<a id="__codelineno-0-217" name="__codelineno-0-217"></a> <span class="n">output_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="n">explicit_format</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>
|
||||
<a id="__codelineno-0-219" name="__codelineno-0-219"></a><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-220" name="__codelineno-0-220"></a><span class="w"> </span><span class="sd">"""Detect the output format from a file extension or explicit format string.</span>
|
||||
<a id="__codelineno-0-221" name="__codelineno-0-221"></a>
|
||||
<a id="__codelineno-0-222" name="__codelineno-0-222"></a><span class="sd"> Args:</span>
|
||||
<a id="__codelineno-0-223" name="__codelineno-0-223"></a><span class="sd"> output_path: Path to the output file.</span>
|
||||
<a id="__codelineno-0-224" name="__codelineno-0-224"></a><span class="sd"> explicit_format: Explicitly specified format, if any.</span>
|
||||
<a id="__codelineno-0-225" name="__codelineno-0-225"></a>
|
||||
<a id="__codelineno-0-226" name="__codelineno-0-226"></a><span class="sd"> Returns:</span>
|
||||
<a id="__codelineno-0-227" name="__codelineno-0-227"></a><span class="sd"> The detected format string.</span>
|
||||
<a id="__codelineno-0-228" name="__codelineno-0-228"></a>
|
||||
<a id="__codelineno-0-229" name="__codelineno-0-229"></a><span class="sd"> Raises:</span>
|
||||
<a id="__codelineno-0-230" name="__codelineno-0-230"></a><span class="sd"> ValueError: If the format cannot be determined.</span>
|
||||
<a id="__codelineno-0-231" name="__codelineno-0-231"></a><span class="sd"> """</span>
|
||||
<a id="__codelineno-0-232" name="__codelineno-0-232"></a> <span class="k">if</span> <span class="n">explicit_format</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="k">return</span> <span class="n">explicit_format</span>
|
||||
<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="n">suffix</span> <span class="o">=</span> <span class="n">output_path</span><span class="o">.</span><span class="n">suffix</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-235" name="__codelineno-0-235"></a> <span class="k">if</span> <span class="n">suffix</span> <span class="ow">in</span> <span class="n">_FORMAT_EXTENSIONS</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-236" name="__codelineno-0-236"></a> <span class="k">return</span> <span class="n">_FORMAT_EXTENSIONS</span><span class="p">[</span><span class="n">suffix</span><span class="p">]</span>
|
||||
<a id="__codelineno-0-237" name="__codelineno-0-237"></a> <span class="n">msg</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<a id="__codelineno-0-238" name="__codelineno-0-238"></a> <span class="sa">f</span><span class="s2">"Cannot detect format from extension '</span><span class="si">{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">'."</span>
|
||||
<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="s2">" Use --format to specify the output format."</span>
|
||||
<a id="__codelineno-0-240" name="__codelineno-0-240"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-0-241" name="__codelineno-0-241"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||||
<span class="normal"><a href="#__codelineno-0-239">239</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-214" name="__codelineno-0-214"></a><span class="k">def</span><span class="w"> </span><span class="nf">detect_format</span><span class="p">(</span>
|
||||
<a id="__codelineno-0-215" name="__codelineno-0-215"></a> <span class="n">output_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-216" name="__codelineno-0-216"></a> <span class="n">explicit_format</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>
|
||||
<a id="__codelineno-0-217" name="__codelineno-0-217"></a><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-218" name="__codelineno-0-218"></a><span class="w"> </span><span class="sd">"""Detect the output format from a file extension or explicit format string.</span>
|
||||
<a id="__codelineno-0-219" name="__codelineno-0-219"></a>
|
||||
<a id="__codelineno-0-220" name="__codelineno-0-220"></a><span class="sd"> Args:</span>
|
||||
<a id="__codelineno-0-221" name="__codelineno-0-221"></a><span class="sd"> output_path: Path to the output file.</span>
|
||||
<a id="__codelineno-0-222" name="__codelineno-0-222"></a><span class="sd"> explicit_format: Explicitly specified format, if any.</span>
|
||||
<a id="__codelineno-0-223" name="__codelineno-0-223"></a>
|
||||
<a id="__codelineno-0-224" name="__codelineno-0-224"></a><span class="sd"> Returns:</span>
|
||||
<a id="__codelineno-0-225" name="__codelineno-0-225"></a><span class="sd"> The detected format string.</span>
|
||||
<a id="__codelineno-0-226" name="__codelineno-0-226"></a>
|
||||
<a id="__codelineno-0-227" name="__codelineno-0-227"></a><span class="sd"> Raises:</span>
|
||||
<a id="__codelineno-0-228" name="__codelineno-0-228"></a><span class="sd"> ValueError: If the format cannot be determined.</span>
|
||||
<a id="__codelineno-0-229" name="__codelineno-0-229"></a><span class="sd"> """</span>
|
||||
<a id="__codelineno-0-230" name="__codelineno-0-230"></a> <span class="k">if</span> <span class="n">explicit_format</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="k">return</span> <span class="n">explicit_format</span>
|
||||
<a id="__codelineno-0-232" name="__codelineno-0-232"></a> <span class="n">suffix</span> <span class="o">=</span> <span class="n">output_path</span><span class="o">.</span><span class="n">suffix</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="k">if</span> <span class="n">suffix</span> <span class="ow">in</span> <span class="n">_FORMAT_EXTENSIONS</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="k">return</span> <span class="n">_FORMAT_EXTENSIONS</span><span class="p">[</span><span class="n">suffix</span><span class="p">]</span>
|
||||
<a id="__codelineno-0-235" name="__codelineno-0-235"></a> <span class="n">msg</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<a id="__codelineno-0-236" name="__codelineno-0-236"></a> <span class="sa">f</span><span class="s2">"Cannot detect format from extension '</span><span class="si">{</span><span class="n">suffix</span><span class="si">}</span><span class="s2">'."</span>
|
||||
<a id="__codelineno-0-237" name="__codelineno-0-237"></a> <span class="s2">" Use --format to specify the output format."</span>
|
||||
<a id="__codelineno-0-238" name="__codelineno-0-238"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||||
</code></pre></div></td></tr></table></div>
|
||||
</details>
|
||||
</div>
|
||||
@@ -1915,7 +1915,9 @@ completed bars. Empty frames and single-row frames return empty results.</p>
|
||||
|
||||
<details class="mkdocstrings-source">
|
||||
<summary>Source code in <code>mt5cli/utils.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-302">302</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-300">300</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-301">301</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-302">302</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-303">303</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-304">304</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-305">305</a></span>
|
||||
@@ -1960,56 +1962,54 @@ completed bars. Empty frames and single-row frames return empty results.</p>
|
||||
<span class="normal"><a href="#__codelineno-0-344">344</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-345">345</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-346">346</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-347">347</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-348">348</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-349">349</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-302" name="__codelineno-0-302"></a><span class="k">def</span><span class="w"> </span><span class="nf">export_dataframe</span><span class="p">(</span>
|
||||
<a id="__codelineno-0-303" name="__codelineno-0-303"></a> <span class="n">df</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-304" name="__codelineno-0-304"></a> <span class="n">output_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-305" name="__codelineno-0-305"></a> <span class="n">output_format</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-306" name="__codelineno-0-306"></a> <span class="n">table_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">"data"</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-307" name="__codelineno-0-307"></a><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-308" name="__codelineno-0-308"></a><span class="w"> </span><span class="sd">"""Export a pandas DataFrame to the specified file format.</span>
|
||||
<a id="__codelineno-0-309" name="__codelineno-0-309"></a>
|
||||
<a id="__codelineno-0-310" name="__codelineno-0-310"></a><span class="sd"> Args:</span>
|
||||
<a id="__codelineno-0-311" name="__codelineno-0-311"></a><span class="sd"> df: DataFrame to export.</span>
|
||||
<a id="__codelineno-0-312" name="__codelineno-0-312"></a><span class="sd"> output_path: Path to the output file.</span>
|
||||
<a id="__codelineno-0-313" name="__codelineno-0-313"></a><span class="sd"> output_format: Output format (csv, json, parquet, or sqlite3).</span>
|
||||
<a id="__codelineno-0-314" name="__codelineno-0-314"></a><span class="sd"> table_name: Table name for SQLite3 output.</span>
|
||||
<a id="__codelineno-0-315" name="__codelineno-0-315"></a>
|
||||
<a id="__codelineno-0-316" name="__codelineno-0-316"></a><span class="sd"> Raises:</span>
|
||||
<a id="__codelineno-0-317" name="__codelineno-0-317"></a><span class="sd"> ImportError: If the parquet format is requested but pyarrow is not installed.</span>
|
||||
<a id="__codelineno-0-318" name="__codelineno-0-318"></a><span class="sd"> ValueError: If the output format is not supported.</span>
|
||||
<a id="__codelineno-0-319" name="__codelineno-0-319"></a><span class="sd"> """</span>
|
||||
<a id="__codelineno-0-320" name="__codelineno-0-320"></a> <span class="k">if</span> <span class="n">output_format</span> <span class="o">==</span> <span class="s2">"csv"</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-321" name="__codelineno-0-321"></a> <span class="n">df</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-322" name="__codelineno-0-322"></a> <span class="k">elif</span> <span class="n">output_format</span> <span class="o">==</span> <span class="s2">"json"</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-323" name="__codelineno-0-323"></a> <span class="n">df</span><span class="o">.</span><span class="n">to_json</span><span class="p">(</span>
|
||||
<a id="__codelineno-0-324" name="__codelineno-0-324"></a> <span class="n">output_path</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-325" name="__codelineno-0-325"></a> <span class="n">orient</span><span class="o">=</span><span class="s2">"records"</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-326" name="__codelineno-0-326"></a> <span class="n">date_format</span><span class="o">=</span><span class="s2">"iso"</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-327" name="__codelineno-0-327"></a> <span class="n">indent</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-328" name="__codelineno-0-328"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-0-329" name="__codelineno-0-329"></a> <span class="k">elif</span> <span class="n">output_format</span> <span class="o">==</span> <span class="s2">"parquet"</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-330" name="__codelineno-0-330"></a> <span class="k">try</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-331" name="__codelineno-0-331"></a> <span class="nb">__import__</span><span class="p">(</span><span class="s2">"pyarrow"</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-332" name="__codelineno-0-332"></a> <span class="k">except</span> <span class="ne">ImportError</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-333" name="__codelineno-0-333"></a> <span class="n">msg</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<a id="__codelineno-0-334" name="__codelineno-0-334"></a> <span class="s2">"Parquet export requires the optional dependency pyarrow. "</span>
|
||||
<a id="__codelineno-0-335" name="__codelineno-0-335"></a> <span class="s1">'Install it with: pip install "mt5cli[parquet]"'</span>
|
||||
<a id="__codelineno-0-336" name="__codelineno-0-336"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-0-337" name="__codelineno-0-337"></a> <span class="k">raise</span> <span class="ne">ImportError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> <span class="kn">from</span><span class="w"> </span><span class="nn">exc</span>
|
||||
<a id="__codelineno-0-338" name="__codelineno-0-338"></a> <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-339" name="__codelineno-0-339"></a> <span class="k">elif</span> <span class="n">output_format</span> <span class="o">==</span> <span class="s2">"sqlite3"</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-340" name="__codelineno-0-340"></a> <span class="n">export_dataframe_to_sqlite</span><span class="p">(</span>
|
||||
<a id="__codelineno-0-341" name="__codelineno-0-341"></a> <span class="n">df</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-342" name="__codelineno-0-342"></a> <span class="n">output_path</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-343" name="__codelineno-0-343"></a> <span class="n">table_name</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-344" name="__codelineno-0-344"></a> <span class="n">if_exists</span><span class="o">=</span><span class="n">IfExists</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-345" name="__codelineno-0-345"></a> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-346" name="__codelineno-0-346"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-0-347" name="__codelineno-0-347"></a> <span class="k">else</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-348" name="__codelineno-0-348"></a> <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"Unsupported output format: </span><span class="si">{</span><span class="n">output_format</span><span class="si">}</span><span class="s2">"</span>
|
||||
<a id="__codelineno-0-349" name="__codelineno-0-349"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||||
<span class="normal"><a href="#__codelineno-0-347">347</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-300" name="__codelineno-0-300"></a><span class="k">def</span><span class="w"> </span><span class="nf">export_dataframe</span><span class="p">(</span>
|
||||
<a id="__codelineno-0-301" name="__codelineno-0-301"></a> <span class="n">df</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-302" name="__codelineno-0-302"></a> <span class="n">output_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-303" name="__codelineno-0-303"></a> <span class="n">output_format</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-304" name="__codelineno-0-304"></a> <span class="n">table_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">"data"</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-305" name="__codelineno-0-305"></a><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-306" name="__codelineno-0-306"></a><span class="w"> </span><span class="sd">"""Export a pandas DataFrame to the specified file format.</span>
|
||||
<a id="__codelineno-0-307" name="__codelineno-0-307"></a>
|
||||
<a id="__codelineno-0-308" name="__codelineno-0-308"></a><span class="sd"> Args:</span>
|
||||
<a id="__codelineno-0-309" name="__codelineno-0-309"></a><span class="sd"> df: DataFrame to export.</span>
|
||||
<a id="__codelineno-0-310" name="__codelineno-0-310"></a><span class="sd"> output_path: Path to the output file.</span>
|
||||
<a id="__codelineno-0-311" name="__codelineno-0-311"></a><span class="sd"> output_format: Output format (csv, json, parquet, or sqlite3).</span>
|
||||
<a id="__codelineno-0-312" name="__codelineno-0-312"></a><span class="sd"> table_name: Table name for SQLite3 output.</span>
|
||||
<a id="__codelineno-0-313" name="__codelineno-0-313"></a>
|
||||
<a id="__codelineno-0-314" name="__codelineno-0-314"></a><span class="sd"> Raises:</span>
|
||||
<a id="__codelineno-0-315" name="__codelineno-0-315"></a><span class="sd"> ImportError: If the parquet format is requested but pyarrow is not installed.</span>
|
||||
<a id="__codelineno-0-316" name="__codelineno-0-316"></a><span class="sd"> ValueError: If the output format is not supported.</span>
|
||||
<a id="__codelineno-0-317" name="__codelineno-0-317"></a><span class="sd"> """</span>
|
||||
<a id="__codelineno-0-318" name="__codelineno-0-318"></a> <span class="k">if</span> <span class="n">output_format</span> <span class="o">==</span> <span class="s2">"csv"</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-319" name="__codelineno-0-319"></a> <span class="n">df</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-320" name="__codelineno-0-320"></a> <span class="k">elif</span> <span class="n">output_format</span> <span class="o">==</span> <span class="s2">"json"</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-321" name="__codelineno-0-321"></a> <span class="n">df</span><span class="o">.</span><span class="n">to_json</span><span class="p">(</span>
|
||||
<a id="__codelineno-0-322" name="__codelineno-0-322"></a> <span class="n">output_path</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-323" name="__codelineno-0-323"></a> <span class="n">orient</span><span class="o">=</span><span class="s2">"records"</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-324" name="__codelineno-0-324"></a> <span class="n">date_format</span><span class="o">=</span><span class="s2">"iso"</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-325" name="__codelineno-0-325"></a> <span class="n">indent</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-326" name="__codelineno-0-326"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-0-327" name="__codelineno-0-327"></a> <span class="k">elif</span> <span class="n">output_format</span> <span class="o">==</span> <span class="s2">"parquet"</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-328" name="__codelineno-0-328"></a> <span class="k">try</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-329" name="__codelineno-0-329"></a> <span class="nb">__import__</span><span class="p">(</span><span class="s2">"pyarrow"</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-330" name="__codelineno-0-330"></a> <span class="k">except</span> <span class="ne">ImportError</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-331" name="__codelineno-0-331"></a> <span class="n">msg</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<a id="__codelineno-0-332" name="__codelineno-0-332"></a> <span class="s2">"Parquet export requires the optional dependency pyarrow. "</span>
|
||||
<a id="__codelineno-0-333" name="__codelineno-0-333"></a> <span class="s1">'Install it with: pip install "mt5cli[parquet]"'</span>
|
||||
<a id="__codelineno-0-334" name="__codelineno-0-334"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-0-335" name="__codelineno-0-335"></a> <span class="k">raise</span> <span class="ne">ImportError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> <span class="kn">from</span><span class="w"> </span><span class="nn">exc</span>
|
||||
<a id="__codelineno-0-336" name="__codelineno-0-336"></a> <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-337" name="__codelineno-0-337"></a> <span class="k">elif</span> <span class="n">output_format</span> <span class="o">==</span> <span class="s2">"sqlite3"</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-338" name="__codelineno-0-338"></a> <span class="n">export_dataframe_to_sqlite</span><span class="p">(</span>
|
||||
<a id="__codelineno-0-339" name="__codelineno-0-339"></a> <span class="n">df</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-340" name="__codelineno-0-340"></a> <span class="n">output_path</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-341" name="__codelineno-0-341"></a> <span class="n">table_name</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-342" name="__codelineno-0-342"></a> <span class="n">if_exists</span><span class="o">=</span><span class="n">IfExists</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-343" name="__codelineno-0-343"></a> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-344" name="__codelineno-0-344"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-0-345" name="__codelineno-0-345"></a> <span class="k">else</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-346" name="__codelineno-0-346"></a> <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"Unsupported output format: </span><span class="si">{</span><span class="n">output_format</span><span class="si">}</span><span class="s2">"</span>
|
||||
<a id="__codelineno-0-347" name="__codelineno-0-347"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||||
</code></pre></div></td></tr></table></div>
|
||||
</details>
|
||||
</div>
|
||||
@@ -2185,7 +2185,9 @@ columns when appending frequently.</p>
|
||||
|
||||
<details class="mkdocstrings-source">
|
||||
<summary>Source code in <code>mt5cli/utils.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-258">258</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-256">256</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-257">257</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-258">258</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-259">259</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-260">260</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-261">261</a></span>
|
||||
@@ -2224,50 +2226,48 @@ columns when appending frequently.</p>
|
||||
<span class="normal"><a href="#__codelineno-0-294">294</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-295">295</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-296">296</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-297">297</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-298">298</a></span>
|
||||
<span class="normal"><a href="#__codelineno-0-299">299</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-258" name="__codelineno-0-258"></a><span class="k">def</span><span class="w"> </span><span class="nf">export_dataframe_to_sqlite</span><span class="p">(</span>
|
||||
<a id="__codelineno-0-259" name="__codelineno-0-259"></a> <span class="n">df</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-260" name="__codelineno-0-260"></a> <span class="n">output_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-261" name="__codelineno-0-261"></a> <span class="n">table_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">"data"</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-262" name="__codelineno-0-262"></a> <span class="o">*</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-263" name="__codelineno-0-263"></a> <span class="n">if_exists</span><span class="p">:</span> <span class="n">IfExists</span> <span class="o">=</span> <span class="n">IfExists</span><span class="o">.</span><span class="n">APPEND</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-264" name="__codelineno-0-264"></a> <span class="n">index</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-265" name="__codelineno-0-265"></a> <span class="n">index_label</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>
|
||||
<a id="__codelineno-0-266" name="__codelineno-0-266"></a> <span class="n">deduplicate_on</span><span class="p">:</span> <span class="n">Sequence</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="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-267" name="__codelineno-0-267"></a><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-268" name="__codelineno-0-268"></a><span class="w"> </span><span class="sd">"""Write a DataFrame to SQLite with configurable append and deduplication.</span>
|
||||
<a id="__codelineno-0-269" name="__codelineno-0-269"></a>
|
||||
<a id="__codelineno-0-270" name="__codelineno-0-270"></a><span class="sd"> Args:</span>
|
||||
<a id="__codelineno-0-271" name="__codelineno-0-271"></a><span class="sd"> df: DataFrame to export.</span>
|
||||
<a id="__codelineno-0-272" name="__codelineno-0-272"></a><span class="sd"> output_path: SQLite database path.</span>
|
||||
<a id="__codelineno-0-273" name="__codelineno-0-273"></a><span class="sd"> table_name: Target table name.</span>
|
||||
<a id="__codelineno-0-274" name="__codelineno-0-274"></a><span class="sd"> if_exists: Conflict behavior when the table already exists.</span>
|
||||
<a id="__codelineno-0-275" name="__codelineno-0-275"></a><span class="sd"> index: Whether to write the DataFrame index as a column.</span>
|
||||
<a id="__codelineno-0-276" name="__codelineno-0-276"></a><span class="sd"> index_label: Column name for the index when ``index=True``.</span>
|
||||
<a id="__codelineno-0-277" name="__codelineno-0-277"></a><span class="sd"> deduplicate_on: Optional key columns to deduplicate after writing,</span>
|
||||
<a id="__codelineno-0-278" name="__codelineno-0-278"></a><span class="sd"> keeping the latest ``ROWID`` per key group. Deduplication scans the</span>
|
||||
<a id="__codelineno-0-279" name="__codelineno-0-279"></a><span class="sd"> full table, so repeated appends cost O(table size); index the key</span>
|
||||
<a id="__codelineno-0-280" name="__codelineno-0-280"></a><span class="sd"> columns when appending frequently.</span>
|
||||
<a id="__codelineno-0-281" name="__codelineno-0-281"></a><span class="sd"> """</span>
|
||||
<a id="__codelineno-0-282" name="__codelineno-0-282"></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">output_path</span><span class="p">)</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-283" name="__codelineno-0-283"></a> <span class="n">df</span><span class="o">.</span><span class="n">to_sql</span><span class="p">(</span> <span class="c1"># type: ignore[reportUnknownMemberType]</span>
|
||||
<a id="__codelineno-0-284" name="__codelineno-0-284"></a> <span class="n">table_name</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-285" name="__codelineno-0-285"></a> <span class="n">conn</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-286" name="__codelineno-0-286"></a> <span class="n">if_exists</span><span class="o">=</span><span class="n">if_exists</span><span class="o">.</span><span class="n">value</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-287" name="__codelineno-0-287"></a> <span class="n">index</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-288" name="__codelineno-0-288"></a> <span class="n">index_label</span><span class="o">=</span><span class="n">index_label</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-289" name="__codelineno-0-289"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-0-290" name="__codelineno-0-290"></a> <span class="k">if</span> <span class="n">deduplicate_on</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-291" name="__codelineno-0-291"></a> <span class="kn">from</span><span class="w"> </span><span class="nn">.history</span><span class="w"> </span><span class="kn">import</span> <span class="n">drop_duplicates_in_table</span> <span class="c1"># noqa: PLC0415</span>
|
||||
<a id="__codelineno-0-292" name="__codelineno-0-292"></a>
|
||||
<a id="__codelineno-0-293" name="__codelineno-0-293"></a> <span class="n">drop_duplicates_in_table</span><span class="p">(</span>
|
||||
<a id="__codelineno-0-294" name="__codelineno-0-294"></a> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">(),</span>
|
||||
<a id="__codelineno-0-295" name="__codelineno-0-295"></a> <span class="n">table_name</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-296" name="__codelineno-0-296"></a> <span class="nb">list</span><span class="p">(</span><span class="n">deduplicate_on</span><span class="p">),</span>
|
||||
<a id="__codelineno-0-297" name="__codelineno-0-297"></a> <span class="n">keep</span><span class="o">=</span><span class="s2">"last"</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-298" name="__codelineno-0-298"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-0-299" name="__codelineno-0-299"></a> <span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
|
||||
<span class="normal"><a href="#__codelineno-0-297">297</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-256" name="__codelineno-0-256"></a><span class="k">def</span><span class="w"> </span><span class="nf">export_dataframe_to_sqlite</span><span class="p">(</span>
|
||||
<a id="__codelineno-0-257" name="__codelineno-0-257"></a> <span class="n">df</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-258" name="__codelineno-0-258"></a> <span class="n">output_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-259" name="__codelineno-0-259"></a> <span class="n">table_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">"data"</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-260" name="__codelineno-0-260"></a> <span class="o">*</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-261" name="__codelineno-0-261"></a> <span class="n">if_exists</span><span class="p">:</span> <span class="n">IfExists</span> <span class="o">=</span> <span class="n">IfExists</span><span class="o">.</span><span class="n">APPEND</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-262" name="__codelineno-0-262"></a> <span class="n">index</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-263" name="__codelineno-0-263"></a> <span class="n">index_label</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>
|
||||
<a id="__codelineno-0-264" name="__codelineno-0-264"></a> <span class="n">deduplicate_on</span><span class="p">:</span> <span class="n">Sequence</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="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-265" name="__codelineno-0-265"></a><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-266" name="__codelineno-0-266"></a><span class="w"> </span><span class="sd">"""Write a DataFrame to SQLite with configurable append and deduplication.</span>
|
||||
<a id="__codelineno-0-267" name="__codelineno-0-267"></a>
|
||||
<a id="__codelineno-0-268" name="__codelineno-0-268"></a><span class="sd"> Args:</span>
|
||||
<a id="__codelineno-0-269" name="__codelineno-0-269"></a><span class="sd"> df: DataFrame to export.</span>
|
||||
<a id="__codelineno-0-270" name="__codelineno-0-270"></a><span class="sd"> output_path: SQLite database path.</span>
|
||||
<a id="__codelineno-0-271" name="__codelineno-0-271"></a><span class="sd"> table_name: Target table name.</span>
|
||||
<a id="__codelineno-0-272" name="__codelineno-0-272"></a><span class="sd"> if_exists: Conflict behavior when the table already exists.</span>
|
||||
<a id="__codelineno-0-273" name="__codelineno-0-273"></a><span class="sd"> index: Whether to write the DataFrame index as a column.</span>
|
||||
<a id="__codelineno-0-274" name="__codelineno-0-274"></a><span class="sd"> index_label: Column name for the index when ``index=True``.</span>
|
||||
<a id="__codelineno-0-275" name="__codelineno-0-275"></a><span class="sd"> deduplicate_on: Optional key columns to deduplicate after writing,</span>
|
||||
<a id="__codelineno-0-276" name="__codelineno-0-276"></a><span class="sd"> keeping the latest ``ROWID`` per key group. Deduplication scans the</span>
|
||||
<a id="__codelineno-0-277" name="__codelineno-0-277"></a><span class="sd"> full table, so repeated appends cost O(table size); index the key</span>
|
||||
<a id="__codelineno-0-278" name="__codelineno-0-278"></a><span class="sd"> columns when appending frequently.</span>
|
||||
<a id="__codelineno-0-279" name="__codelineno-0-279"></a><span class="sd"> """</span>
|
||||
<a id="__codelineno-0-280" name="__codelineno-0-280"></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">output_path</span><span class="p">)</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-281" name="__codelineno-0-281"></a> <span class="n">df</span><span class="o">.</span><span class="n">to_sql</span><span class="p">(</span> <span class="c1"># type: ignore[reportUnknownMemberType]</span>
|
||||
<a id="__codelineno-0-282" name="__codelineno-0-282"></a> <span class="n">table_name</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-283" name="__codelineno-0-283"></a> <span class="n">conn</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-284" name="__codelineno-0-284"></a> <span class="n">if_exists</span><span class="o">=</span><span class="n">if_exists</span><span class="o">.</span><span class="n">value</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-285" name="__codelineno-0-285"></a> <span class="n">index</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-286" name="__codelineno-0-286"></a> <span class="n">index_label</span><span class="o">=</span><span class="n">index_label</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-287" name="__codelineno-0-287"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-0-288" name="__codelineno-0-288"></a> <span class="k">if</span> <span class="n">deduplicate_on</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-289" name="__codelineno-0-289"></a> <span class="kn">from</span><span class="w"> </span><span class="nn">.history</span><span class="w"> </span><span class="kn">import</span> <span class="n">drop_duplicates_in_table</span> <span class="c1"># noqa: PLC0415</span>
|
||||
<a id="__codelineno-0-290" name="__codelineno-0-290"></a>
|
||||
<a id="__codelineno-0-291" name="__codelineno-0-291"></a> <span class="n">drop_duplicates_in_table</span><span class="p">(</span>
|
||||
<a id="__codelineno-0-292" name="__codelineno-0-292"></a> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">(),</span>
|
||||
<a id="__codelineno-0-293" name="__codelineno-0-293"></a> <span class="n">table_name</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-294" name="__codelineno-0-294"></a> <span class="nb">list</span><span class="p">(</span><span class="n">deduplicate_on</span><span class="p">),</span>
|
||||
<a id="__codelineno-0-295" name="__codelineno-0-295"></a> <span class="n">keep</span><span class="o">=</span><span class="s2">"last"</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-296" name="__codelineno-0-296"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-0-297" name="__codelineno-0-297"></a> <span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
|
||||
</code></pre></div></td></tr></table></div>
|
||||
</details>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user