Repair docs (html, md). Update docstrings

This commit is contained in:
parent e264750187
commit 6a4ad48577
125 changed files with 3706 additions and 4913 deletions

View file

@ -293,14 +293,26 @@
<span class="sd">- Для отправки ARP-кадров могут потребоваться повышенные привилегии или capability на сырой сокет.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">logging</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">fastapi</span><span class="w"> </span><span class="kn">import</span> <span class="n">Depends</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">scapy.layers.l2</span><span class="w"> </span><span class="kn">import</span> <span class="n">ARP</span><span class="p">,</span> <span class="n">Ether</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">scapy.sendrecv</span><span class="w"> </span><span class="kn">import</span> <span class="n">srp</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">netifaces</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">netaddr</span><span class="w"> </span><span class="kn">import</span> <span class="n">IPNetwork</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">utils.i18n</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_translations</span><span class="p">,</span> <span class="n">_</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">babel.support</span><span class="w"> </span><span class="kn">import</span> <span class="n">Translations</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">scapy.layers.l2</span><span class="w"> </span><span class="kn">import</span> <span class="n">ARP</span><span class="p">,</span> <span class="n">Ether</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">scapy.sendrecv</span><span class="w"> </span><span class="kn">import</span> <span class="n">srp</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span> <span class="c1"># pragma: no cover - fallback for doc builds</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;SPHINX_BUILD&quot;</span><span class="p">):</span>
<span class="n">ARP</span> <span class="o">=</span> <span class="n">Ether</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1"># type: ignore</span>
<span class="k">def</span><span class="w"> </span><span class="nf">srp</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;scapy is unavailable during documentation build&quot;</span><span class="p">)</span> <span class="kn">from</span><span class="w"> </span><span class="nn">exc</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span>
<div class="viewcode-block" id="NetworkScanner">
<a class="viewcode-back" href="../../api/services/arp_service.html#services.arp_service.NetworkScanner">[docs]</a>
<span class="k">class</span><span class="w"> </span><span class="nc">NetworkScanner</span><span class="p">:</span>
@ -320,15 +332,34 @@
<span class="sd"> Инициализирует интерфейс, информацию об IP-адресах и локальный MAC-адрес.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">interface</span> <span class="ow">or</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">gateways</span><span class="p">()[</span><span class="s2">&quot;default&quot;</span><span class="p">][</span><span class="n">netifaces</span><span class="o">.</span><span class="n">AF_INET</span><span class="p">][</span><span class="mi">1</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span> <span class="o">=</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">ifaddresses</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">netifaces</span><span class="o">.</span><span class="n">AF_INET</span><span class="p">,</span> <span class="p">[])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">networks</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">IPNetwork</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">ip</span><span class="p">[</span><span class="s1">&#39;addr&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">ip</span><span class="p">[</span><span class="s1">&#39;netmask&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">ip</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span>
<span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">local_mac</span> <span class="o">=</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">ifaddresses</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">)[</span><span class="n">netifaces</span><span class="o">.</span><span class="n">AF_LINK</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;addr&quot;</span><span class="p">]</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">interface</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span> <span class="o">=</span> <span class="n">interface</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">default_gateway</span> <span class="o">=</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">gateways</span><span class="p">()</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">netifaces</span><span class="o">.</span><span class="n">AF_INET</span><span class="p">)</span>
<span class="k">if</span> <span class="n">default_gateway</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span> <span class="o">=</span> <span class="n">default_gateway</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s2">&quot;Default gateway not found&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span> <span class="o">=</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">ifaddresses</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">netifaces</span><span class="o">.</span><span class="n">AF_INET</span><span class="p">,</span> <span class="p">[])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">networks</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">IPNetwork</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">ip</span><span class="p">[</span><span class="s1">&#39;addr&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">ip</span><span class="p">[</span><span class="s1">&#39;netmask&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">ip</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span>
<span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">local_mac</span> <span class="o">=</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">ifaddresses</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">)[</span><span class="n">netifaces</span><span class="o">.</span><span class="n">AF_LINK</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;addr&quot;</span><span class="p">]</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;SPHINX_BUILD&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span> <span class="o">=</span> <span class="n">interface</span> <span class="ow">or</span> <span class="s2">&quot;eth0&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">networks</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">local_mac</span> <span class="o">=</span> <span class="s2">&quot;00:00:00:00:00:00&quot;</span>
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">&quot;NetworkScanner falling back to mocked interface during documentation build: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">exc</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span>
<span class="bp">self</span><span class="o">.</span><span class="n">translations</span> <span class="o">=</span> <span class="n">translations</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_create_arp_packet</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target_ip</span><span class="p">):</span>

View file

@ -292,12 +292,17 @@
<span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
<span class="n">CONFIG_PATH</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;GONETS_CONFIG_PATH&quot;</span><span class="p">,</span> <span class="s2">&quot;/etc/gonets/config.ini&quot;</span><span class="p">)</span>
<span class="n">config</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
<span class="n">config_path</span> <span class="o">=</span> <span class="s2">&quot;/etc/gonets/config.ini&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">config_path</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Configuration file </span><span class="si">{</span><span class="n">config_path</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">)</span>
<span class="n">config</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">config_path</span><span class="p">)</span>
<span class="n">SECRET_KEY</span> <span class="o">=</span> <span class="n">config</span><span class="p">[</span><span class="s2">&quot;JWT&quot;</span><span class="p">][</span><span class="s2">&quot;secret_key&quot;</span><span class="p">]</span>
<span class="n">read_files</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">CONFIG_PATH</span><span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot;JWT&quot;</span> <span class="ow">in</span> <span class="n">config</span><span class="p">:</span>
<span class="n">SECRET_KEY</span> <span class="o">=</span> <span class="n">config</span><span class="p">[</span><span class="s2">&quot;JWT&quot;</span><span class="p">][</span><span class="s2">&quot;secret_key&quot;</span><span class="p">]</span>
<span class="k">elif</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;SPHINX_BUILD&quot;</span><span class="p">):</span>
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">&quot;JWT secret not found; using dummy value for documentation build&quot;</span><span class="p">)</span>
<span class="n">SECRET_KEY</span> <span class="o">=</span> <span class="s2">&quot;sphinx-placeholder-secret&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Configuration file </span><span class="si">{</span><span class="n">CONFIG_PATH</span><span class="si">}</span><span class="s2"> not found or missing [JWT] section&quot;</span><span class="p">)</span>
<span class="n">ALGORITHM</span> <span class="o">=</span> <span class="s2">&quot;HS256&quot;</span>
<span class="n">ACCESS_TOKEN_EXPIRE_MINUTES</span> <span class="o">=</span> <span class="mi">30</span>

View file

@ -302,14 +302,16 @@
<span class="k">class</span><span class="w"> </span><span class="nc">WifiStorage</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Класс для хранения данных о Wi-Fi сетях и их заметках по SSID.</span>
<span class="sd"> Формат:</span>
<span class="sd"> Формат::</span>
<span class="sd"> {</span>
<span class="sd"> &quot;networks&quot;: [{&quot;ssid&quot;: str, &quot;note&quot;: Optional[str]}]</span>
<span class="sd"> }</span>
<span class="sd"> Поведение:</span>
<span class="sd"> - Создаёт директорию хранения при инициализации, ведёт логирование путей.</span>
<span class="sd"> - Валидация структуры при чтении, безопасная запись с Unicode и отступами.</span>
<span class="sd"> - Создаёт директорию хранения при инициализации, ведёт логирование путей.</span>
<span class="sd"> - Валидирует структуру при чтении и безопасно записывает JSON с Unicode и отступами.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">storage_path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;storage/wifi/wifi.json&quot;</span><span class="p">,</span> <span class="n">translations</span><span class="p">:</span> <span class="n">Translations</span> <span class="o">=</span> <span class="n">Depends</span><span class="p">(</span><span class="n">get_translations</span><span class="p">())):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage_file</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">storage_path</span><span class="p">)</span>