Sphinx generate docs
This commit is contained in:
parent
5bc23e7eb8
commit
af1420dbde
216 changed files with 39471 additions and 13 deletions
513
SRV/docs/_build/html/_modules/api/v1/auth.html
vendored
Normal file
513
SRV/docs/_build/html/_modules/api/v1/auth.html
vendored
Normal file
|
|
@ -0,0 +1,513 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../genindex.html"><link rel="search" title="Search" href="../../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>api.v1.auth - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for api.v1.auth</h1><div class="highlight"><pre>
|
||||
<span></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">APIRouter</span><span class="p">,</span> <span class="n">Depends</span><span class="p">,</span> <span class="n">HTTPException</span><span class="p">,</span> <span class="n">Request</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">fastapi.security</span><span class="w"> </span><span class="kn">import</span> <span class="n">OAuth2PasswordBearer</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">services.auth_service</span><span class="w"> </span><span class="kn">import</span> <span class="n">AuthService</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">models.auth</span><span class="w"> </span><span class="kn">import</span> <span class="n">UserCreate</span><span class="p">,</span> <span class="n">UserLogin</span><span class="p">,</span> <span class="n">UserResponse</span><span class="p">,</span> <span class="n">Token</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">storage.json_storage</span><span class="w"> </span><span class="kn">import</span> <span class="n">JsonStorage</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="kn">import</span><span class="w"> </span><span class="nn">logging</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
|
||||
|
||||
<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">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">()</span>
|
||||
<span class="n">auth_service</span> <span class="o">=</span> <span class="n">AuthService</span><span class="p">()</span>
|
||||
<span class="n">oauth2_scheme</span> <span class="o">=</span> <span class="n">OAuth2PasswordBearer</span><span class="p">(</span><span class="n">tokenUrl</span><span class="o">=</span><span class="s2">"/auth/login"</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="register">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/auth.html#api.v1.auth.register">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/register"</span><span class="p">,</span> <span class="n">response_model</span><span class="o">=</span><span class="n">UserResponse</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">register</span><span class="p">(</span><span class="n">user</span><span class="p">:</span> <span class="n">UserCreate</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="w"> </span><span class="sd">"""Регистрирует нового пользователя.</span>
|
||||
|
||||
<span class="sd"> Создаёт нового пользователя на основе предоставленных данных и возвращает</span>
|
||||
<span class="sd"> информацию о зарегистрированном пользователе.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> user (UserCreate): Объект с данными нового пользователя (username, password, is_admin).</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> UserResponse: Объект с данными зарегистрированного пользователя (id, username, is_admin).</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если пользователь уже существует (status_code=400) или произошла</span>
|
||||
<span class="sd"> внутренняя ошибка (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">db_user</span> <span class="o">=</span> <span class="n">auth_service</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">user</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Пользователь </span><span class="si">{</span><span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="si">}</span><span class="s2"> успешно зарегистрирован"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">db_user</span>
|
||||
<span class="k">except</span> <span class="n">HTTPException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">e</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error in register: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Не удалось зарегистрировать пользователя"</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="login">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/auth.html#api.v1.auth.login">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/login"</span><span class="p">,</span> <span class="n">response_model</span><span class="o">=</span><span class="n">Token</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">login</span><span class="p">(</span><span class="n">user</span><span class="p">:</span> <span class="n">UserLogin</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span> <span class="n">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="w"> </span><span class="sd">"""Авторизует пользователя и создаёт сессию.</span>
|
||||
|
||||
<span class="sd"> Проверяет учетные данные пользователя и возвращает токен и session_id для</span>
|
||||
<span class="sd"> последующей авторизации.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> user (UserLogin): Объект с данными для входа (username, password).</span>
|
||||
<span class="sd"> request (Request): Объект запроса для получения client_id (IP-адрес клиента).</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Token: Объект с access_token и session_id для авторизации.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если учетные данные неверны (status_code=401) или произошла</span>
|
||||
<span class="sd"> внутренняя ошибка (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">client_id</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">host</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Попытка входа в систему клиента </span><span class="si">{</span><span class="n">client_id</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">auth_service</span><span class="o">.</span><span class="n">login</span><span class="p">(</span><span class="n">user</span><span class="p">,</span> <span class="n">client_id</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Успешная авторизация для клиента </span><span class="si">{</span><span class="n">client_id</span><span class="si">}</span><span class="s2">, Идентификатор сессии: </span><span class="si">{</span><span class="n">result</span><span class="p">[</span><span class="s1">'session_id'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">result</span>
|
||||
<span class="k">except</span> <span class="n">HTTPException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">e</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Ошибка при авторизации: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Не удалось авторизовать пользователя"</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="get_current_user">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/auth.html#api.v1.auth.get_current_user">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/me"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_current_user</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span> <span class="n">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="w"> </span><span class="sd">"""Возвращает данные текущего пользователя и токен.</span>
|
||||
|
||||
<span class="sd"> Проверяет активную сессию по client_id и возвращает информацию о пользователе</span>
|
||||
<span class="sd"> и токен для дальнейшего использования.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> request (Request): Объект запроса для получения client_id (IP-адрес клиента).</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с ключами "user" (UserResponse), "access_token" (str) и</span>
|
||||
<span class="sd"> "token_type" (str, всегда "bearer").</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если сессия не найдена или истекла (status_code=401) или</span>
|
||||
<span class="sd"> произошла внутренняя ошибка (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">client_id</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">host</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Запрос /me для клиента </span><span class="si">{</span><span class="n">client_id</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">auth_service</span><span class="o">.</span><span class="n">get_user_by_session</span><span class="p">(</span><span class="n">client_id</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"user"</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">"user"</span><span class="p">],</span>
|
||||
<span class="s2">"access_token"</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">"access_token"</span><span class="p">],</span>
|
||||
<span class="s2">"token_type"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"bearer"</span><span class="p">),</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">except</span> <span class="n">HTTPException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">e</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Ошибка при get_current_user: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Не удалось получить данные пользователя"</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="logout">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/auth.html#api.v1.auth.logout">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/logout"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">logout</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span> <span class="n">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="w"> </span><span class="sd">"""Выход из системы, удаление сессии.</span>
|
||||
|
||||
<span class="sd"> Удаляет активную сессию пользователя по client_id.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> request (Request): Объект запроса для получения client_id (IP-адрес клиента).</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Пустой словарь или сообщение об успешном выходе.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если сессия не найдена (status_code=401) или произошла</span>
|
||||
<span class="sd"> внутренняя ошибка (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">client_id</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">host</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Запрос на выход из системы для клиента </span><span class="si">{</span><span class="n">client_id</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">auth_service</span><span class="o">.</span><span class="n">logout</span><span class="p">(</span><span class="n">client_id</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="n">HTTPException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">e</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Не удалось выйти из системы: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Не удалось выйти из системы"</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="check_users_file">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/auth.html#api.v1.auth.check_users_file">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/check_json"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">check_users_file</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="w"> </span><span class="sd">"""Проверяет, существует ли файл users.json и содержит ли он пользователей.</span>
|
||||
|
||||
<span class="sd"> Возвращает информацию о состоянии файла и наличии пользователей.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с ключами:</span>
|
||||
<span class="sd"> - "exists" (bool): Существует ли файл.</span>
|
||||
<span class="sd"> - "has_users" (bool): Содержит ли файл пользователей.</span>
|
||||
<span class="sd"> - "message" (str): Сообщение с описанием результата.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если произошла ошибка при проверке файла (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">file_path</span> <span class="o">=</span> <span class="s2">"/etc/gonets/users.json"</span>
|
||||
<span class="n">storage</span> <span class="o">=</span> <span class="n">JsonStorage</span><span class="p">(</span><span class="n">file_path</span><span class="o">=</span><span class="n">file_path</span><span class="p">)</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">file_path</span><span class="p">):</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Файл </span><span class="si">{</span><span class="n">file_path</span><span class="si">}</span><span class="s2"> не существует"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"exists"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||
<span class="s2">"has_users"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||
<span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Файл users.json не существует"</span><span class="p">),</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">storage</span><span class="o">.</span><span class="n">_read_data</span><span class="p">()</span>
|
||||
<span class="n">has_users</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"users"</span><span class="p">,</span> <span class="p">[]))</span> <span class="o">></span> <span class="mi">0</span>
|
||||
<span class="k">if</span> <span class="n">has_users</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Файл </span><span class="si">{</span><span class="n">file_path</span><span class="si">}</span><span class="s2"> существует и содержит пользователей"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"exists"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
||||
<span class="s2">"has_users"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
||||
<span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Файл users.json существует и содержит пользователей"</span><span class="p">),</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Файл </span><span class="si">{</span><span class="n">file_path</span><span class="si">}</span><span class="s2"> существует, но не содержит пользователей"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"exists"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
||||
<span class="s2">"has_users"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||
<span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Файл users.json существует, но не содержит пользователей"</span><span class="p">),</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Ошибка при проверке файла: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка при проверке файла"</span><span class="p">))</span></div>
|
||||
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
435
SRV/docs/_build/html/_modules/api/v1/ip.html
vendored
Normal file
435
SRV/docs/_build/html/_modules/api/v1/ip.html
vendored
Normal file
|
|
@ -0,0 +1,435 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../genindex.html"><link rel="search" title="Search" href="../../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>api.v1.ip - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for api.v1.ip</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Any</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">APIRouter</span><span class="p">,</span> <span class="n">Body</span><span class="p">,</span> <span class="n">HTTPException</span><span class="p">,</span> <span class="n">Depends</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">services.ip_service</span><span class="w"> </span><span class="kn">import</span> <span class="n">IPService</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="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="n">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">()</span>
|
||||
<span class="n">ip_service</span> <span class="o">=</span> <span class="n">IPService</span><span class="p">()</span>
|
||||
|
||||
<div class="viewcode-block" id="check_ip_config">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/ip.html#api.v1.ip.check_ip_config">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/check_ip"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">check_ip_config</span><span class="p">(</span><span class="n">data</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="n">Body</span><span class="p">(</span><span class="o">...</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="w"> </span><span class="sd">"""Проверяет доступность IP-адреса перед его применением.</span>
|
||||
|
||||
<span class="sd"> Выполняет ARP-сканирование для проверки, занят ли указанный IP-адрес,</span>
|
||||
<span class="sd"> и возвращает результат проверки.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> data (Dict[str, Any]): Словарь с данными конфигурации, включая</span>
|
||||
<span class="sd"> "ipv4_updates" с полем "ipv4.address-data" для нового IP-адреса.</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Dict[str, Any]: Словарь с ключами:</span>
|
||||
<span class="sd"> - "available" (bool): Доступен ли IP-адрес.</span>
|
||||
<span class="sd"> - "message" (str): Сообщение о результате проверки.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если произошла внутренняя ошибка (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="k">await</span> <span class="n">ip_service</span><span class="o">.</span><span class="n">check_ip_config</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">translations</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">result</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span>
|
||||
<span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span>
|
||||
<span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка проверки IP конфигурации: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="apply_ip_config">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/ip.html#api.v1.ip.apply_ip_config">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/apply_ip"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">apply_ip_config</span><span class="p">(</span><span class="n">data</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="n">Body</span><span class="p">(</span><span class="o">...</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="w"> </span><span class="sd">"""Применяет проверенные IP-настройки к указанному сетевому профилю.</span>
|
||||
|
||||
<span class="sd"> Обновляет настройки соединения через NetworkManager, отключает и</span>
|
||||
<span class="sd"> переподключает устройство к сети.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> data (Dict[str, Any]): Словарь с данными конфигурации, включая</span>
|
||||
<span class="sd"> "connection_id" и "ipv4_updates" с обновлениями IP-настроек.</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с ключами:</span>
|
||||
<span class="sd"> - "success" (bool): Успешность операции.</span>
|
||||
<span class="sd"> - "message" (str): Сообщение об успешном применении настроек.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если подключение не найдено (status_code=404) или</span>
|
||||
<span class="sd"> произошла внутренняя ошибка (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">await</span> <span class="n">ip_service</span><span class="o">.</span><span class="n">apply_ip_config</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">translations</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
||||
<span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Настройки сетевого профиля для </span><span class="si">{connection_id}</span><span class="s2"> применены"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">connection_id</span><span class="o">=</span><span class="n">data</span><span class="p">[</span><span class="s2">"connection_id"</span><span class="p">]</span>
|
||||
<span class="p">),</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span>
|
||||
<span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span>
|
||||
<span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка проверки IP конфигурации: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="save_ip_config">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/ip.html#api.v1.ip.save_ip_config">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/save_ip"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">save_ip_config</span><span class="p">(</span><span class="n">data</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="n">Body</span><span class="p">(</span><span class="o">...</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="w"> </span><span class="sd">"""Применяет проверенные IP-настройки для отката сетевого профиля.</span>
|
||||
|
||||
<span class="sd"> Используется для сохранения и отката настроек сетевого профиля к предыдущему</span>
|
||||
<span class="sd"> состоянию через NetworkManager.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> data (Dict[str, Any]): Словарь с данными конфигурации, включая</span>
|
||||
<span class="sd"> "connection_id" и "ipv4_updates" с обновлениями IP-настроек.</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с ключами:</span>
|
||||
<span class="sd"> - "success" (bool): Успешность операции.</span>
|
||||
<span class="sd"> - "message" (str): Сообщение об успешном применении настроек.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если подключение не найдено (status_code=404) или</span>
|
||||
<span class="sd"> произошла внутренняя ошибка (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">await</span> <span class="n">ip_service</span><span class="o">.</span><span class="n">apply_ip_config</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">translations</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
||||
<span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Настройки сетевого профиля для </span><span class="si">{connection_id}</span><span class="s2"> применены"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">connection_id</span><span class="o">=</span><span class="n">data</span><span class="p">[</span><span class="s2">"connection_id"</span><span class="p">]</span>
|
||||
<span class="p">),</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span>
|
||||
<span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span>
|
||||
<span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка проверки IP конфигурации: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
558
SRV/docs/_build/html/_modules/api/v1/network.html
vendored
Normal file
558
SRV/docs/_build/html/_modules/api/v1/network.html
vendored
Normal file
|
|
@ -0,0 +1,558 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../genindex.html"><link rel="search" title="Search" href="../../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>api.v1.network - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for api.v1.network</h1><div class="highlight"><pre>
|
||||
<span></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">APIRouter</span><span class="p">,</span> <span class="n">Body</span><span class="p">,</span> <span class="n">HTTPException</span><span class="p">,</span> <span class="n">Depends</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">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Union</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">services.network_service</span><span class="w"> </span><span class="kn">import</span> <span class="n">NetworkService</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">models.network</span><span class="w"> </span><span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="n">NetworkInterfacesContainer</span><span class="p">,</span>
|
||||
<span class="n">Activation</span><span class="p">,</span>
|
||||
<span class="n">Deactivation</span><span class="p">,</span>
|
||||
<span class="n">NetworkInterface</span><span class="p">,</span>
|
||||
<span class="n">WiFiDevice</span><span class="p">,</span>
|
||||
<span class="p">)</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="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">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">()</span>
|
||||
<span class="n">network_service</span> <span class="o">=</span> <span class="n">NetworkService</span><span class="p">()</span>
|
||||
|
||||
<div class="viewcode-block" id="ContainerPositionManager">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/network.html#api.v1.network.ContainerPositionManager">[docs]</a>
|
||||
<span class="k">class</span><span class="w"> </span><span class="nc">ContainerPositionManager</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Класс для управления позициями и состоянием контейнеров.</span>
|
||||
|
||||
<span class="sd"> Хранит и обновляет координаты (x, y) и состояние (isOpen) для контейнеров</span>
|
||||
<span class="sd"> активации и деактивации.</span>
|
||||
<span class="sd"> """</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="w"> </span><span class="sd">"""Инициализирует менеджер позиций контейнеров.</span>
|
||||
|
||||
<span class="sd"> Создаёт начальные позиции и состояния для контейнеров "activation" и</span>
|
||||
<span class="sd"> "deactivation" с координатами (0, 0) и закрытым состоянием (False).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">positions</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]]</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"activation"</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s2">"x"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
|
||||
<span class="s2">"y"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
|
||||
<span class="s2">"isOpen"</span><span class="p">:</span> <span class="kc">False</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s2">"deactivation"</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s2">"x"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
|
||||
<span class="s2">"y"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
|
||||
<span class="s2">"isOpen"</span><span class="p">:</span> <span class="kc">False</span>
|
||||
<span class="p">},</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<div class="viewcode-block" id="ContainerPositionManager.get_position_and_state">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/network.html#api.v1.network.ContainerPositionManager.get_position_and_state">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">get_position_and_state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">container_name</span><span class="p">:</span> <span class="nb">str</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="o">-></span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Получает текущие координаты и состояние указанного контейнера.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> container_name (str): Имя контейнера ("activation" или "deactivation").</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Tuple[int, int, bool]: Кортеж с координатами (x, y) и состоянием (isOpen).</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> ValueError: Если указан неверный идентификатор контейнера.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">container</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">positions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">container_name</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">container</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Неверное имя контейнера: </span><span class="si">{container_name}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">container_name</span><span class="o">=</span><span class="n">container_name</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">container</span><span class="p">[</span><span class="s2">"x"</span><span class="p">],</span> <span class="n">container</span><span class="p">[</span><span class="s2">"y"</span><span class="p">],</span> <span class="n">container</span><span class="p">[</span><span class="s2">"isOpen"</span><span class="p">]</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="ContainerPositionManager.update_position">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/network.html#api.v1.network.ContainerPositionManager.update_position">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">update_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">container_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">x</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">isOpen</span><span class="p">:</span> <span class="nb">bool</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Обновляет позицию и состояние контейнера по его идентификатору.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> container_id (int): Идентификатор контейнера (1 для "activation", 2 для "deactivation").</span>
|
||||
<span class="sd"> x (int): Новая координата X.</span>
|
||||
<span class="sd"> y (int): Новая координата Y.</span>
|
||||
<span class="sd"> isOpen (bool): Новое состояние контейнера (открыт/закрыт).</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> ValueError: Если container_id не соответствует ни одному контейнеру.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">container_name</span> <span class="o">=</span> <span class="s2">"activation"</span> <span class="k">if</span> <span class="n">container_id</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="s2">"deactivation"</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">positions</span><span class="p">[</span><span class="n">container_name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"x"</span><span class="p">:</span> <span class="n">x</span><span class="p">,</span> <span class="s2">"y"</span><span class="p">:</span> <span class="n">y</span><span class="p">,</span> <span class="s2">"isOpen"</span><span class="p">:</span> <span class="n">isOpen</span><span class="p">}</span></div>
|
||||
</div>
|
||||
|
||||
|
||||
<span class="n">container_manager</span> <span class="o">=</span> <span class="n">ContainerPositionManager</span><span class="p">()</span>
|
||||
|
||||
<div class="viewcode-block" id="get_network_data">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/network.html#api.v1.network.get_network_data">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_network_data</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="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Dict</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Возвращает текущие сетевые данные в виде словаря.</span>
|
||||
|
||||
<span class="sd"> Получает данные о сетевых интерфейсах, разделяет их на активные и неактивные,</span>
|
||||
<span class="sd"> и возвращает их в формате Activation и Deactivation с учётом позиций и состояний</span>
|
||||
<span class="sd"> контейнеров.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Dict[str, Dict]: Словарь с ключами "activation" и "deactivation", содержащими</span>
|
||||
<span class="sd"> данные о соответствующих контейнерах.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если произошла ошибка при получении данных (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Calling get_network_data()"</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">network_data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">network_service</span><span class="o">.</span><span class="n">get_network_interfaces_container</span><span class="p">()</span>
|
||||
|
||||
<span class="n">activation_interfaces</span><span class="p">,</span> <span class="n">deactivation_interfaces</span> <span class="o">=</span> <span class="n">_split_interfaces</span><span class="p">(</span><span class="n">network_data</span><span class="o">.</span><span class="n">interfaces</span><span class="p">)</span>
|
||||
|
||||
<span class="n">activation_x</span><span class="p">,</span> <span class="n">activation_y</span><span class="p">,</span> <span class="n">activation_is_open</span> <span class="o">=</span> <span class="p">(</span><span class="n">container_manager</span><span class="o">.</span><span class="n">get_position_and_state</span><span class="p">(</span><span class="s2">"activation"</span><span class="p">))</span>
|
||||
<span class="n">deactivation_x</span><span class="p">,</span> <span class="n">deactivation_y</span><span class="p">,</span> <span class="n">deactivation_is_open</span> <span class="o">=</span> <span class="p">(</span><span class="n">container_manager</span><span class="o">.</span><span class="n">get_position_and_state</span><span class="p">(</span><span class="s2">"deactivation"</span><span class="p">))</span>
|
||||
|
||||
<span class="n">activation</span> <span class="o">=</span> <span class="n">Activation</span><span class="p">(</span>
|
||||
<span class="nb">id</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
|
||||
<span class="n">interfaces</span><span class="o">=</span><span class="n">activation_interfaces</span><span class="p">,</span>
|
||||
<span class="n">container_x</span><span class="o">=</span><span class="n">activation_x</span><span class="p">,</span>
|
||||
<span class="n">container_y</span><span class="o">=</span><span class="n">activation_y</span><span class="p">,</span>
|
||||
<span class="n">isOpen</span><span class="o">=</span><span class="n">activation_is_open</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">deactivation</span> <span class="o">=</span> <span class="n">Deactivation</span><span class="p">(</span>
|
||||
<span class="nb">id</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
|
||||
<span class="n">interfaces</span><span class="o">=</span><span class="n">deactivation_interfaces</span><span class="p">,</span>
|
||||
<span class="n">container_x</span><span class="o">=</span><span class="n">deactivation_x</span><span class="p">,</span>
|
||||
<span class="n">container_y</span><span class="o">=</span><span class="n">deactivation_y</span><span class="p">,</span>
|
||||
<span class="n">isOpen</span><span class="o">=</span><span class="n">deactivation_is_open</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"activation"</span><span class="p">:</span> <span class="n">activation</span><span class="o">.</span><span class="n">model_dump</span><span class="p">(),</span>
|
||||
<span class="s2">"deactivation"</span><span class="p">:</span> <span class="n">deactivation</span><span class="o">.</span><span class="n">model_dump</span><span class="p">(),</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error in get_network_data: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Не удалось получить сетевые данные"</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">_split_interfaces</span><span class="p">(</span>
|
||||
<span class="n">interfaces</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="n">NetworkInterface</span><span class="p">,</span> <span class="n">WiFiDevice</span><span class="p">]],</span>
|
||||
<span class="p">)</span> <span class="o">-></span> <span class="n">Tuple</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="n">NetworkInterface</span><span class="p">,</span> <span class="n">WiFiDevice</span><span class="p">]],</span> <span class="n">List</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="n">NetworkInterface</span><span class="p">,</span> <span class="n">WiFiDevice</span><span class="p">]]]:</span>
|
||||
<span class="w"> </span><span class="sd">"""Разделяет интерфейсы на активные и неактивные.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> interfaces (List[Union[NetworkInterface, WiFiDevice]]): Список сетевых интерфейсов.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Tuple[List[Union[NetworkInterface, WiFiDevice]], List[Union[NetworkInterface, WiFiDevice]]]:</span>
|
||||
<span class="sd"> Кортеж из списков активных и неактивных интерфейсов.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">activation_interfaces</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">deactivation_interfaces</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">interface</span> <span class="ow">in</span> <span class="n">interfaces</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">interface</span><span class="o">.</span><span class="n">device_state</span> <span class="o">==</span> <span class="s2">"100"</span><span class="p">:</span>
|
||||
<span class="n">activation_interfaces</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">interface</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">deactivation_interfaces</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">interface</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">activation_interfaces</span><span class="p">,</span> <span class="n">deactivation_interfaces</span>
|
||||
|
||||
<div class="viewcode-block" id="update_container_position">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/network.html#api.v1.network.update_container_position">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/update_container_position"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">update_container_position</span><span class="p">(</span><span class="n">data</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]</span> <span class="o">=</span> <span class="n">Body</span><span class="p">(</span><span class="o">...</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="w"> </span><span class="sd">"""Обновляет позицию и состояние контейнера.</span>
|
||||
|
||||
<span class="sd"> Принимает данные о новом положении и состоянии контейнера и обновляет их</span>
|
||||
<span class="sd"> в менеджере позиций.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> data (Dict[str, Union[int, bool]]): Словарь с ключами:</span>
|
||||
<span class="sd"> - "container_id" (int): Идентификатор контейнера (1 или 2).</span>
|
||||
<span class="sd"> - "container_x" (int): Новая координата X.</span>
|
||||
<span class="sd"> - "container_y" (int): Новая координата Y.</span>
|
||||
<span class="sd"> - "isOpen" (bool): Новое состояние контейнера (открыт/закрыт).</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с ключами:</span>
|
||||
<span class="sd"> - "success" (bool): Успешность операции.</span>
|
||||
<span class="sd"> - "message" (str): Сообщение об успешном обновлении.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если отсутствуют обязательные поля (status_code=400) или</span>
|
||||
<span class="sd"> типы данных неверны.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">required_keys</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="s2">"container_id"</span><span class="p">,</span> <span class="s2">"container_x"</span><span class="p">,</span> <span class="s2">"container_y"</span><span class="p">,</span> <span class="s2">"isOpen"</span>
|
||||
<span class="p">]</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span><span class="n">key</span> <span class="ow">in</span> <span class="n">data</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">required_keys</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
||||
<span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Отсутствуют обязательные поля: container_id, container_x, container_y, isOpen"</span><span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">container_id</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">"container_id"</span><span class="p">]</span>
|
||||
<span class="n">container_x</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">"container_x"</span><span class="p">]</span>
|
||||
<span class="n">container_y</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">"container_y"</span><span class="p">]</span>
|
||||
<span class="n">is_open</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">"isOpen"</span><span class="p">]</span>
|
||||
|
||||
<span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">container_id</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span>
|
||||
<span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">container_x</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span>
|
||||
<span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">container_y</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span>
|
||||
<span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">is_open</span><span class="p">,</span> <span class="nb">bool</span><span class="p">)):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Неверный тип данных в запросе"</span><span class="p">))</span>
|
||||
|
||||
<span class="n">container_manager</span><span class="o">.</span><span class="n">update_position</span><span class="p">(</span><span class="n">container_id</span><span class="p">,</span> <span class="n">container_x</span><span class="p">,</span> <span class="n">container_y</span><span class="p">,</span> <span class="n">is_open</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
||||
<span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Позиция и состояние контейнера обновлены"</span><span class="p">)</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error updating container position: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Не удалось обновить положение контейнера: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="get_hostname">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/network.html#api.v1.network.get_hostname">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/get_hostname"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_hostname</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="w"> </span><span class="sd">"""Возвращает имя хоста системы.</span>
|
||||
|
||||
<span class="sd"> Выполняет запрос к сервису для получения имени хоста.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с ключом "hostname" и значением имени хоста.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если произошла ошибка при получении имени хоста (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">hostname_info</span> <span class="o">=</span> <span class="k">await</span> <span class="n">network_service</span><span class="o">.</span><span class="n">get_hostname</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">hostname_info</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error in get_hostname: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Не удалось получить имя хоста"</span><span class="p">))</span></div>
|
||||
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
545
SRV/docs/_build/html/_modules/api/v1/settings.html
vendored
Normal file
545
SRV/docs/_build/html/_modules/api/v1/settings.html
vendored
Normal file
|
|
@ -0,0 +1,545 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../genindex.html"><link rel="search" title="Search" href="../../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>api.v1.settings - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for api.v1.settings</h1><div class="highlight"><pre>
|
||||
<span></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">import</span><span class="w"> </span><span class="nn">subprocess</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Optional</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">APIRouter</span><span class="p">,</span> <span class="n">HTTPException</span><span class="p">,</span> <span class="n">Depends</span><span class="p">,</span> <span class="n">Response</span><span class="p">,</span> <span class="n">Request</span><span class="p">,</span> <span class="n">Body</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">starlette.responses</span><span class="w"> </span><span class="kn">import</span> <span class="n">FileResponse</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">services.settings_service</span><span class="w"> </span><span class="kn">import</span> <span class="n">SettingsService</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="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="kn">from</span><span class="w"> </span><span class="nn">models.subnet</span><span class="w"> </span><span class="kn">import</span> <span class="n">SubnetScanRequest</span> <span class="c1"># Предполагается, что модель определена</span>
|
||||
|
||||
<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">DEBUG</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">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">()</span>
|
||||
<span class="n">settings_service</span> <span class="o">=</span> <span class="n">SettingsService</span><span class="p">()</span>
|
||||
|
||||
<div class="viewcode-block" id="clear_subnet">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/settings.html#api.v1.settings.clear_subnet">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/clear_subnet"</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">clear_subnet</span><span class="p">(</span><span class="n">subnet</span><span class="p">:</span> <span class="n">Optional</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> <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="w"> </span><span class="sd">"""Очищает данные узлов подсети, сохранённые в devices.json.</span>
|
||||
|
||||
<span class="sd"> Удаляет все записи об узлах подсети, оставляя файл пустым.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> subnet (Optional[str]): Подсеть в формате CIDR (например, "10.1.1.0/24").</span>
|
||||
<span class="sd"> Если None, очищает все подсети.</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с сообщением об успешной очистке.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если произошла ошибка очистки (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">success</span> <span class="o">=</span> <span class="n">settings_service</span><span class="o">.</span><span class="n">clear_subnet</span><span class="p">(</span><span class="n">subnet</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">success</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">subnet</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Данные узлов подсети </span><span class="si">{subnet}</span><span class="s2"> успешно очищены"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">subnet</span><span class="o">=</span><span class="n">subnet</span><span class="p">)}</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Данные всех подсетей успешно очищены"</span><span class="p">)}</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Не удалось очистить данные узлов подсети"</span><span class="p">))</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error clearing subnet data: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка очистки: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="clear_wifi">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/settings.html#api.v1.settings.clear_wifi">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/clear_wifi"</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">clear_wifi</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="w"> </span><span class="sd">"""Очищает данные точек доступа Wi-Fi, сохранённые в wifi.json.</span>
|
||||
|
||||
<span class="sd"> Удаляет все записи о точках доступа, оставляя файл пустым.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с сообщением об успешной очистке.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если произошла ошибка очистки (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">success</span> <span class="o">=</span> <span class="n">settings_service</span><span class="o">.</span><span class="n">clear_wifi</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">success</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Данные точек доступа Wi-Fi успешно очищены"</span><span class="p">)}</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Не удалось очистить данные точек доступа Wi-Fi"</span><span class="p">))</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error clearing wifi data: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка очистки: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="clear_all_data">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/settings.html#api.v1.settings.clear_all_data">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/clear_all_data"</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">clear_all_data</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="w"> </span><span class="sd">"""Очищает данные узлов подсети и точек доступа Wi-Fi в обоих файлах.</span>
|
||||
|
||||
<span class="sd"> Удаляет все записи из devices.json и wifi.json.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с сообщением об успешной очистке.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если произошла ошибка очистки (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">success</span> <span class="o">=</span> <span class="n">settings_service</span><span class="o">.</span><span class="n">clear_all_data</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">success</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Все сетевые данные успешно очищены"</span><span class="p">)}</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Не удалось очистить все сетевые данные"</span><span class="p">))</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error clearing all data: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка очистки: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<span class="n">WIFI_PATH</span> <span class="o">=</span> <span class="s2">"storage/wifi/wifi.json"</span>
|
||||
|
||||
<div class="viewcode-block" id="export_devices">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/settings.html#api.v1.settings.export_devices">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/export_devices"</span><span class="p">,</span> <span class="n">response_class</span><span class="o">=</span><span class="n">FileResponse</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">export_devices</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">SubnetScanRequest</span> <span class="o">=</span> <span class="n">Body</span><span class="p">(</span><span class="o">...</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="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Экспортирует файл с данными устройств в формате JSON для указанной подсети.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> request (SubnetScanRequest): Объект с полем subnet в формате CIDR.</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> FileResponse: Файл <subnet>.json для скачивания.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если файл не найден (status_code=404).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">subnet</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">subnet</span>
|
||||
<span class="n">file_path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"storage/subnets/</span><span class="si">{</span><span class="n">subnet</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'/'</span><span class="p">,</span><span class="w"> </span><span class="s1">'_'</span><span class="p">)</span><span class="si">}</span><span class="s2">.json"</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">file_path</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="sa">f</span><span class="s2">"Export file not found: </span><span class="si">{</span><span class="n">file_path</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Файл для подсети </span><span class="si">{subnet}</span><span class="s2"> не найден"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">subnet</span><span class="o">=</span><span class="n">subnet</span><span class="p">))</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Exporting file: </span><span class="si">{</span><span class="n">file_path</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">FileResponse</span><span class="p">(</span>
|
||||
<span class="n">path</span><span class="o">=</span><span class="n">file_path</span><span class="p">,</span>
|
||||
<span class="n">filename</span><span class="o">=</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">subnet</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'/'</span><span class="p">,</span><span class="w"> </span><span class="s1">'_'</span><span class="p">)</span><span class="si">}</span><span class="s2">.json"</span><span class="p">,</span>
|
||||
<span class="n">media_type</span><span class="o">=</span><span class="s2">"application/json"</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="export_wifi">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/settings.html#api.v1.settings.export_wifi">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/export_wifi"</span><span class="p">,</span> <span class="n">response_class</span><span class="o">=</span><span class="n">FileResponse</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">export_wifi</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="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Экспортирует файл с данными устройств в формате JSON.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> FileResponse: Файл wifi.json для скачивания.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если файл не найден (status_code=404).</span>
|
||||
<span class="sd"> """</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">WIFI_PATH</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="sa">f</span><span class="s2">"Export file not found: </span><span class="si">{</span><span class="n">WIFI_PATH</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Файл не найден"</span><span class="p">))</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Exporting file: </span><span class="si">{</span><span class="n">WIFI_PATH</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">FileResponse</span><span class="p">(</span>
|
||||
<span class="n">path</span><span class="o">=</span><span class="n">WIFI_PATH</span><span class="p">,</span>
|
||||
<span class="n">filename</span><span class="o">=</span><span class="s2">"wifi.json"</span><span class="p">,</span>
|
||||
<span class="n">media_type</span><span class="o">=</span><span class="s2">"application/json"</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="set_language">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/settings.html#api.v1.settings.set_language">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/set_language"</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">set_language</span><span class="p">(</span><span class="n">locale</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">response</span><span class="p">:</span> <span class="n">Response</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="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Устанавливает куку locale для смены языка пользователя.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> locale (str): Используемый язык.</span>
|
||||
<span class="sd"> response (Response): Запрос.</span>
|
||||
<span class="sd"> translations: Объект переводов текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Сообщение об успешной установке языка.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">lc_messages_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="vm">__file__</span><span class="p">),</span> <span class="s1">'..'</span><span class="p">,</span> <span class="s1">'..'</span><span class="p">,</span> <span class="s1">'locales'</span><span class="p">,</span> <span class="n">locale</span><span class="p">,</span> <span class="s1">'LC_MESSAGES'</span><span class="p">)</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">isdir</span><span class="p">(</span><span class="n">lc_messages_path</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span>
|
||||
<span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
|
||||
<span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Язык '</span><span class="si">{locale}</span><span class="s2">' не поддерживается."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">locale</span><span class="o">=</span><span class="n">locale</span><span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">has_mo_or_po</span> <span class="o">=</span> <span class="nb">any</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">'.mo'</span><span class="p">)</span> <span class="ow">or</span> <span class="n">f</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">'.po'</span><span class="p">)</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">lc_messages_path</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">has_mo_or_po</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span>
|
||||
<span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
|
||||
<span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Язык '</span><span class="si">{locale}</span><span class="s2">' не поддерживается (нет файлов переводов)."</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">locale</span><span class="o">=</span><span class="n">locale</span><span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">response</span><span class="o">.</span><span class="n">set_cookie</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"locale"</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">locale</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="s2">"/"</span><span class="p">,</span> <span class="n">httponly</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Язык успешно установлен: </span><span class="si">{locale}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">locale</span><span class="o">=</span><span class="n">locale</span><span class="p">)}</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="get_system_language">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/settings.html#api.v1.settings.get_system_language">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/get_system_language"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_system_language</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">Request</span><span class="p">,</span> <span class="n">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="w"> </span><span class="sd">"""Выводит текущий язык, установленный в системе на основе locale.</span>
|
||||
|
||||
<span class="sd"> Выполняет команду 'locale' в системе и извлекает параметры LANG</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> request (Request): Объект запроса для доступа к параметрам.</span>
|
||||
<span class="sd"> translations: Объект переводов текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с текущим языком системы.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если не удалось извлечь системный язык (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">([</span><span class="s1">'locale'</span><span class="p">],</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">check</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">output</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">stdout</span>
|
||||
<span class="n">lang</span> <span class="o">=</span> <span class="nb">next</span><span class="p">((</span><span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'='</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">output</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span> <span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'LANG='</span><span class="p">)),</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">lang</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"language"</span><span class="p">:</span> <span class="n">lang</span><span class="p">}</span>
|
||||
<span class="k">else</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="sa">f</span><span class="s2">"No locale found: </span><span class="si">{</span><span class="n">output</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"language"</span><span class="p">:</span> <span class="s1">'unknown'</span><span class="p">}</span>
|
||||
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error executing locale command: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Не удалось определить язык в системе"</span><span class="p">))</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Unexpected error getting system language: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка при определении языка в системе </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
700
SRV/docs/_build/html/_modules/api/v1/subnet.html
vendored
Normal file
700
SRV/docs/_build/html/_modules/api/v1/subnet.html
vendored
Normal file
|
|
@ -0,0 +1,700 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../genindex.html"><link rel="search" title="Search" href="../../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>api.v1.subnet - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for api.v1.subnet</h1><div class="highlight"><pre>
|
||||
<span></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">APIRouter</span><span class="p">,</span> <span class="n">HTTPException</span><span class="p">,</span> <span class="n">Body</span><span class="p">,</span> <span class="n">Depends</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">models.subnet</span><span class="w"> </span><span class="kn">import</span> <span class="n">SubnetScanResult</span><span class="p">,</span> <span class="n">SubnetScanRequest</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">models.wifi</span><span class="w"> </span><span class="kn">import</span> <span class="n">WifiScanResult</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">models.request</span><span class="w"> </span><span class="kn">import</span> <span class="n">NoteRequest</span><span class="p">,</span> <span class="n">WifiConnectRequest</span><span class="p">,</span> <span class="n">WifiDisconnectRequest</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">services.subnet_service</span><span class="w"> </span><span class="kn">import</span> <span class="n">SubnetService</span><span class="p">,</span> <span class="n">get_subnet_service</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">services.wifi_service</span><span class="w"> </span><span class="kn">import</span> <span class="n">WifiService</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">services.connect_service</span><span class="w"> </span><span class="kn">import</span> <span class="n">WifiConnectionService</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="kn">import</span><span class="w"> </span><span class="nn">logging</span>
|
||||
|
||||
<span class="n">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">()</span>
|
||||
|
||||
<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>
|
||||
|
||||
<div class="viewcode-block" id="scan_subnet">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/subnet.html#api.v1.subnet.scan_subnet">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/devices"</span><span class="p">,</span> <span class="n">response_model</span><span class="o">=</span><span class="n">SubnetScanResult</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">scan_subnet</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">SubnetScanRequest</span> <span class="o">=</span> <span class="n">Body</span><span class="p">(</span><span class="o">...</span><span class="p">),</span> <span class="n">subnet_service</span><span class="p">:</span> <span class="n">SubnetService</span> <span class="o">=</span> <span class="n">Depends</span><span class="p">(</span><span class="n">get_subnet_service</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="w"> </span><span class="sd">"""Сканирует локальную подсеть и возвращает данные об устройствах.</span>
|
||||
|
||||
<span class="sd"> Выполняет сканирование указанной подсети для обнаружения активных устройств.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> request (SubnetScanRequest): Объект с полем subnet.</span>
|
||||
<span class="sd"> subnet_service: Сервис сканирования подсети.</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> SubnetScanResult: Объект с результатами сканирования (устройства и их данные).</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если произошла ошибка сканирования (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="c1"># Если subnet пустая строка, определяем автоматически</span>
|
||||
<span class="n">subnet</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">subnet</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">subnet</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Requested subnet scan for: </span><span class="si">{</span><span class="n">subnet</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">'auto-detected'</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">subnet_service</span><span class="o">.</span><span class="n">scan_subnet</span><span class="p">(</span><span class="n">subnet</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="o">.</span><span class="n">devices</span> <span class="ow">and</span> <span class="n">result</span><span class="o">.</span><span class="n">error</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="sa">f</span><span class="s2">"No devices found in subnet </span><span class="si">{</span><span class="n">subnet</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">'auto-detected'</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">result</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error in scan_subnet: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка сканирования подсети: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="scan_wifi">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/subnet.html#api.v1.subnet.scan_wifi">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/wifi"</span><span class="p">,</span> <span class="n">response_model</span><span class="o">=</span><span class="n">WifiScanResult</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">scan_wifi</span><span class="p">(</span><span class="n">timeout</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">30</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="w"> </span><span class="sd">"""Сканирует Wi-Fi точки доступа и возвращает данные о них.</span>
|
||||
|
||||
<span class="sd"> Выполняет сканирование доступных Wi-Fi сетей с указанным таймаутом.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> timeout (int, optional): Таймаут сканирования в секундах. По умолчанию 30.</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> WifiScanResult: Объект с результатами сканирования (список Wi-Fi сетей).</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если произошла ошибка сканирования Wi-Fi (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">wifi_service</span> <span class="o">=</span> <span class="n">WifiService</span><span class="p">()</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">wifi_service</span><span class="o">.</span><span class="n">scan_wifi</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">result</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка сканирования Wi-Fi: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="add_note">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/subnet.html#api.v1.subnet.add_note">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/devices/</span><span class="si">{mac}</span><span class="s2">/note"</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">add_note</span><span class="p">(</span><span class="n">mac</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">NoteRequest</span><span class="p">,</span> <span class="n">subnet_service</span><span class="p">:</span> <span class="n">SubnetService</span> <span class="o">=</span> <span class="n">Depends</span><span class="p">(</span><span class="n">get_subnet_service</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="w"> </span><span class="sd">"""Добавляет заметку для устройства по MAC-адресу.</span>
|
||||
|
||||
<span class="sd"> Привязывает заметку к устройству, идентифицируемому по MAC-адресу.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> mac (str): MAC-адрес устройства.</span>
|
||||
<span class="sd"> request (NoteRequest): Объект с полем "note" для текста заметки.</span>
|
||||
<span class="sd"> subnet_service: Сервис сканирования подсети.</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с сообщением об успешном добавлении заметки.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если устройство не найдено (status_code=404), заметка уже</span>
|
||||
<span class="sd"> существует (status_code=400), или произошла внутренняя ошибка (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">success</span><span class="p">,</span> <span class="n">result</span> <span class="o">=</span> <span class="n">subnet_service</span><span class="o">.</span><span class="n">add_note</span><span class="p">(</span><span class="n">mac</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">note</span><span class="p">,</span> <span class="n">translations</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">success</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"not_found"</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Устройство с MAC </span><span class="si">{mac}</span><span class="s2"> не найдено"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">mac</span><span class="o">=</span><span class="n">mac</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"note_exists"</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Заметка для устройства с MAC </span><span class="si">{mac}</span><span class="s2"> уже существует"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">mac</span><span class="o">=</span><span class="n">mac</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Внутренняя ошибка сервера: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="n">result</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s2">"error"</span><span class="p">]))</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Заметка '</span><span class="si">{note}</span><span class="s2">' добавлена для устройства </span><span class="si">{mac}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">note</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">note</span><span class="p">,</span> <span class="n">mac</span><span class="o">=</span><span class="n">mac</span><span class="p">)}</span>
|
||||
<span class="k">except</span> <span class="n">HTTPException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">e</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка добавления заметки: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="update_note">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/subnet.html#api.v1.subnet.update_note">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="s2">"/devices/</span><span class="si">{mac}</span><span class="s2">/note"</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">update_note</span><span class="p">(</span><span class="n">mac</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">NoteRequest</span><span class="p">,</span> <span class="n">subnet_service</span><span class="p">:</span> <span class="n">SubnetService</span> <span class="o">=</span> <span class="n">Depends</span><span class="p">(</span><span class="n">get_subnet_service</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="w"> </span><span class="sd">"""Обновляет заметку для устройства по MAC-адресу.</span>
|
||||
|
||||
<span class="sd"> Изменяет существующую заметку, привязанную к устройству.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> mac (str): MAC-адрес устройства.</span>
|
||||
<span class="sd"> request (NoteRequest): Объект с полем "note" для нового текста заметки.</span>
|
||||
<span class="sd"> subnet_service: Сервис сканирования подсети.</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с сообщением об успешном обновлении заметки.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если устройство не найдено (status_code=404), заметка не</span>
|
||||
<span class="sd"> существует (status_code=400), или произошла внутренняя ошибка (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">success</span><span class="p">,</span> <span class="n">result</span> <span class="o">=</span> <span class="n">subnet_service</span><span class="o">.</span><span class="n">update_note</span><span class="p">(</span><span class="n">mac</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">note</span><span class="p">,</span> <span class="n">translations</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">success</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"not_found"</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Устройство с MAC </span><span class="si">{mac}</span><span class="s2"> не найдено"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">mac</span><span class="o">=</span><span class="n">mac</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"note_not_exists"</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Заметка для устройства с MAC </span><span class="si">{mac}</span><span class="s2"> не существует"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">mac</span><span class="o">=</span><span class="n">mac</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Внутренняя ошибка сервера: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="n">result</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s2">"error"</span><span class="p">]))</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Заметка '</span><span class="si">{note}</span><span class="s2">' обновлена для устройства </span><span class="si">{mac}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">note</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">note</span><span class="p">,</span> <span class="n">mac</span><span class="o">=</span><span class="n">mac</span><span class="p">)}</span>
|
||||
<span class="k">except</span> <span class="n">HTTPException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">e</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка обновления заметки: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="delete_note">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/subnet.html#api.v1.subnet.delete_note">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="s2">"/devices/</span><span class="si">{mac}</span><span class="s2">/note"</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">delete_note</span><span class="p">(</span><span class="n">mac</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">subnet_service</span><span class="p">:</span> <span class="n">SubnetService</span> <span class="o">=</span> <span class="n">Depends</span><span class="p">(</span><span class="n">get_subnet_service</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="w"> </span><span class="sd">"""Удаляет заметку для устройства по MAC-адресу.</span>
|
||||
|
||||
<span class="sd"> Удаляет привязанную заметку для указанного устройства.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> mac (str): MAC-адрес устройства.</span>
|
||||
<span class="sd"> subnet_service: Сервис сканирования подсети.</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с сообщением об успешном удалении заметки.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если устройство не найдено (status_code=404), заметка не</span>
|
||||
<span class="sd"> существует (status_code=400), или произошла внутренняя ошибка (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">success</span><span class="p">,</span> <span class="n">result</span> <span class="o">=</span> <span class="n">subnet_service</span><span class="o">.</span><span class="n">delete_note</span><span class="p">(</span><span class="n">mac</span><span class="p">,</span> <span class="n">translations</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">success</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"not_found"</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Устройство с MAC </span><span class="si">{mac}</span><span class="s2"> не найдено"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">mac</span><span class="o">=</span><span class="n">mac</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"note_not_exists"</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Заметка для устройства с MAC </span><span class="si">{mac}</span><span class="s2"> не существует"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">mac</span><span class="o">=</span><span class="n">mac</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Внутренняя ошибка сервера: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="n">result</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s2">"error"</span><span class="p">]))</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Заметка удалена для устройства </span><span class="si">{mac}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">mac</span><span class="o">=</span><span class="n">mac</span><span class="p">)}</span>
|
||||
<span class="k">except</span> <span class="n">HTTPException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">e</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка удаления заметки: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="add_wifi_note">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/subnet.html#api.v1.subnet.add_wifi_note">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/wifi/</span><span class="si">{ssid}</span><span class="s2">/note"</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">add_wifi_note</span><span class="p">(</span><span class="n">ssid</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">NoteRequest</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="w"> </span><span class="sd">"""Добавляет заметку для сети Wi-Fi по SSID.</span>
|
||||
|
||||
<span class="sd"> Привязывает заметку к Wi-Fi сети, идентифицируемой по SSID.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> ssid (str): Идентификатор Wi-Fi сети.</span>
|
||||
<span class="sd"> request (NoteRequest): Объект с полем "note" для текста заметки.</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с сообщением об успешном добавлении заметки.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если сеть не найдена (status_code=404), заметка уже</span>
|
||||
<span class="sd"> существует (status_code=400), или произошла внутренняя ошибка (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">wifi_service</span> <span class="o">=</span> <span class="n">WifiService</span><span class="p">()</span>
|
||||
<span class="n">success</span><span class="p">,</span> <span class="n">result</span> <span class="o">=</span> <span class="n">wifi_service</span><span class="o">.</span><span class="n">add_note</span><span class="p">(</span><span class="n">ssid</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">note</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">success</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"not_found"</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Сеть с SSID </span><span class="si">{ssid}</span><span class="s2"> не найдена"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"note_exists"</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Заметка для сети с SSID </span><span class="si">{ssid}</span><span class="s2"> уже существует"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Внутренняя ошибка сервера: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="n">result</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s2">"error"</span><span class="p">]))</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Заметка '</span><span class="si">{note}</span><span class="s2">' добавлена для сети с SSID </span><span class="si">{ssid}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">note</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">note</span><span class="p">,</span> <span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)}</span>
|
||||
<span class="k">except</span> <span class="n">HTTPException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">e</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка добавления заметки: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="update_wifi_note">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/subnet.html#api.v1.subnet.update_wifi_note">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="s2">"/wifi/</span><span class="si">{ssid}</span><span class="s2">/note"</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">update_wifi_note</span><span class="p">(</span><span class="n">ssid</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">NoteRequest</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="w"> </span><span class="sd">"""Обновляет заметку для сети Wi-Fi по SSID.</span>
|
||||
|
||||
<span class="sd"> Изменяет существующую заметку, привязанную к Wi-Fi сети.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> ssid (str): Идентификатор Wi-Fi сети.</span>
|
||||
<span class="sd"> request (NoteRequest): Объект с полем "note" для нового текста заметки.</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с сообщением об успешном обновлении заметки.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если сеть не найдена (status_code=404), заметка не</span>
|
||||
<span class="sd"> существует (status_code=400), или произошла внутренняя ошибка (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">wifi_service</span> <span class="o">=</span> <span class="n">WifiService</span><span class="p">()</span>
|
||||
<span class="n">success</span><span class="p">,</span> <span class="n">result</span> <span class="o">=</span> <span class="n">wifi_service</span><span class="o">.</span><span class="n">update_note</span><span class="p">(</span><span class="n">ssid</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">note</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">success</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"not_found"</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Сеть с SSID </span><span class="si">{ssid}</span><span class="s2"> не найдена"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"note_not_exists"</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Заметка для сети с SSID </span><span class="si">{ssid}</span><span class="s2"> не существует"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Внутренняя ошибка сервера: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="n">result</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s2">"error"</span><span class="p">]))</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Заметка '</span><span class="si">{note}</span><span class="s2">' обновлена для сети с SSID </span><span class="si">{ssid}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">note</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">note</span><span class="p">,</span> <span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)}</span>
|
||||
<span class="k">except</span> <span class="n">HTTPException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">e</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка обновления заметки: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="delete_wifi_note">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/subnet.html#api.v1.subnet.delete_wifi_note">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="s2">"/wifi/</span><span class="si">{ssid}</span><span class="s2">/note"</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">delete_wifi_note</span><span class="p">(</span><span class="n">ssid</span><span class="p">:</span> <span class="nb">str</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="w"> </span><span class="sd">"""Удаляет заметку для сети Wi-Fi по SSID.</span>
|
||||
|
||||
<span class="sd"> Удаляет привязанную заметку для указанной Wi-Fi сети.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> ssid (str): Идентификатор Wi-Fi сети.</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с сообщением об успешном удалении заметки.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если сеть не найдена (status_code=404), заметка не</span>
|
||||
<span class="sd"> существует (status_code=400), или произошла внутренняя ошибка (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">wifi_service</span> <span class="o">=</span> <span class="n">WifiService</span><span class="p">()</span>
|
||||
<span class="n">success</span><span class="p">,</span> <span class="n">result</span> <span class="o">=</span> <span class="n">wifi_service</span><span class="o">.</span><span class="n">delete_note</span><span class="p">(</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">success</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"not_found"</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Сеть с SSID </span><span class="si">{ssid}</span><span class="s2"> не найдена"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"note_not_exists"</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Заметка для сети с SSID </span><span class="si">{ssid}</span><span class="s2"> не существует"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Внутренняя ошибка сервера: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="n">result</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s2">"error"</span><span class="p">]))</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Заметка удалена для сети с SSID </span><span class="si">{ssid}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)}</span>
|
||||
<span class="k">except</span> <span class="n">HTTPException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">e</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка удаления заметки: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="connect_to_wifi">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/subnet.html#api.v1.subnet.connect_to_wifi">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/wifi/connect"</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">connect_to_wifi</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">WifiConnectRequest</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="w"> </span><span class="sd">"""Подключается к Wi-Fi сети по SSID и паролю.</span>
|
||||
|
||||
<span class="sd"> Выполняет подключение к указанной Wi-Fi сети с использованием предоставленных</span>
|
||||
<span class="sd"> учетных данных.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> request (WifiConnectRequest): Объект с полями "ssid" и "password".</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с сообщением об успешном подключении.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если подключение не удалось (status_code=400).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">wifi_service</span> <span class="o">=</span> <span class="n">WifiConnectionService</span><span class="p">()</span>
|
||||
<span class="n">success</span><span class="p">,</span> <span class="n">message</span> <span class="o">=</span> <span class="n">wifi_service</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">ssid</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">password</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">success</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="n">message</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Успешно подключено к </span><span class="si">{ssid}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">ssid</span><span class="p">)}</span>
|
||||
<span class="k">except</span> <span class="n">HTTPException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">e</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка подключения к Wi-Fi: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="disconnect_from_wifi">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/subnet.html#api.v1.subnet.disconnect_from_wifi">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/wifi/disconnect"</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">disconnect_from_wifi</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">WifiDisconnectRequest</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="w"> </span><span class="sd">"""Отключается от Wi-Fi сети по указанному SSID.</span>
|
||||
|
||||
<span class="sd"> Выполняет отключение от указанной Wi-Fi сети.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> request (WifiDisconnectRequest): Объект с полем "ssid".</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с сообщением об успешном отключении.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если отключение не удалось (status_code=400).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">wifi_service</span> <span class="o">=</span> <span class="n">WifiConnectionService</span><span class="p">()</span>
|
||||
<span class="n">success</span><span class="p">,</span> <span class="n">message</span> <span class="o">=</span> <span class="n">wifi_service</span><span class="o">.</span><span class="n">disconnect</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">success</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="n">message</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="n">message</span> <span class="ow">or</span> <span class="s2">"Успешно отключено от </span><span class="si">{ssid}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">ssid</span><span class="p">)}</span>
|
||||
<span class="k">except</span> <span class="n">HTTPException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">e</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка отключения от Wi-Fi: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="get_wifi_status">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/subnet.html#api.v1.subnet.get_wifi_status">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/wifi/status"</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">get_wifi_status</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="w"> </span><span class="sd">"""Проверяет статус текущего подключения к Wi-Fi.</span>
|
||||
|
||||
<span class="sd"> Возвращает информацию о текущем состоянии подключения и SSID, если подключение активно.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с ключами:</span>
|
||||
<span class="sd"> - "status" (str): Состояние ("connected" или другое).</span>
|
||||
<span class="sd"> - "ssid" (str, optional): SSID текущей сети, если подключено.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если проверка статуса не удалась (status_code=400).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">wifi_service</span> <span class="o">=</span> <span class="n">WifiConnectionService</span><span class="p">()</span>
|
||||
<span class="n">success</span><span class="p">,</span> <span class="n">message</span> <span class="o">=</span> <span class="n">wifi_service</span><span class="o">.</span><span class="n">get_status</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">success</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="n">message</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"status"</span><span class="p">:</span> <span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"connected"</span><span class="p">),</span> <span class="s2">"ssid"</span><span class="p">:</span> <span class="n">message</span><span class="p">}</span>
|
||||
<span class="k">except</span> <span class="n">HTTPException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">e</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка проверки статуса Wi-Fi: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span></div>
|
||||
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
549
SRV/docs/_build/html/_modules/api/v1/ufw.html
vendored
Normal file
549
SRV/docs/_build/html/_modules/api/v1/ufw.html
vendored
Normal file
|
|
@ -0,0 +1,549 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../genindex.html"><link rel="search" title="Search" href="../../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>api.v1.ufw - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for api.v1.ufw</h1><div class="highlight"><pre>
|
||||
<span></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">APIRouter</span><span class="p">,</span> <span class="n">HTTPException</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">List</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">pydantic</span><span class="w"> </span><span class="kn">import</span> <span class="n">BaseModel</span><span class="p">,</span> <span class="n">Field</span>
|
||||
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">models.ufw</span><span class="w"> </span><span class="kn">import</span> <span class="n">UFWRulesResponse</span><span class="p">,</span> <span class="n">UFWStatus</span><span class="p">,</span> <span class="n">UFWRule</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">services.ufw_service</span><span class="w"> </span><span class="kn">import</span> <span class="n">UFWService</span>
|
||||
|
||||
<span class="n">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">()</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="RuleNumbers">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/ufw.html#api.v1.ufw.RuleNumbers">[docs]</a>
|
||||
<span class="k">class</span><span class="w"> </span><span class="nc">RuleNumbers</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
|
||||
<span class="n">numbers</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="n">Field</span><span class="p">(</span>
|
||||
<span class="o">...</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="s2">"Список номеров правил для удаления"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="get_ufw_rules">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/ufw.html#api.v1.ufw.get_ufw_rules">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/rules"</span><span class="p">,</span> <span class="n">response_model</span><span class="o">=</span><span class="n">UFWRulesResponse</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_ufw_rules</span><span class="p">():</span>
|
||||
<span class="w"> </span><span class="sd">"""Возвращает все правила UFW.</span>
|
||||
|
||||
<span class="sd"> Осуществляет обращение к сервису `UFWService` для чтения текущего списка</span>
|
||||
<span class="sd"> правил брандмауэра и возвращает результат в сериализованном виде для клиента.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> UFWRulesResponse: Структура с коллекцией правил и сопутствующей</span>
|
||||
<span class="sd"> информацией о состоянии.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: В случае ошибок взаимодействия с UFW (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">ufw_service</span> <span class="o">=</span> <span class="n">UFWService</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">ufw_service</span><span class="o">.</span><span class="n">get_ufw_rules</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Error: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="get_ufw_status">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/ufw.html#api.v1.ufw.get_ufw_status">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/status"</span><span class="p">,</span> <span class="n">response_model</span><span class="o">=</span><span class="n">UFWStatus</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_ufw_status</span><span class="p">():</span>
|
||||
<span class="w"> </span><span class="sd">"""Возвращает текущий статус UFW.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> UFWStatus: Объект со сведениями о включенности UFW и деталями статуса.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если не удалось получить статус (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">ufw_service</span> <span class="o">=</span> <span class="n">UFWService</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">ufw_service</span><span class="o">.</span><span class="n">get_ufw_status</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Error: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="enable_ufw">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/ufw.html#api.v1.ufw.enable_ufw">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/enable"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">enable_ufw</span><span class="p">():</span>
|
||||
<span class="w"> </span><span class="sd">"""Включает UFW.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с ключами `status` и `message` при успешном выполнении.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если включение завершилось неуспешно (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">ufw_service</span> <span class="o">=</span> <span class="n">UFWService</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">success</span> <span class="o">=</span> <span class="n">ufw_service</span><span class="o">.</span><span class="n">enable_ufw</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">success</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"UFW успешно включен"</span><span class="p">}</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span>
|
||||
<span class="n">detail</span><span class="o">=</span><span class="s2">"Не удалось включить UFW"</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Error: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="disable_ufw">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/ufw.html#api.v1.ufw.disable_ufw">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/disable"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">disable_ufw</span><span class="p">():</span>
|
||||
<span class="w"> </span><span class="sd">"""Выключает UFW.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Словарь с ключами `status` и `message` при успешном выполнении.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если выключение завершилось неуспешно (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">ufw_service</span> <span class="o">=</span> <span class="n">UFWService</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">success</span> <span class="o">=</span> <span class="n">ufw_service</span><span class="o">.</span><span class="n">disable_ufw</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">success</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"UFW успешно выключен"</span><span class="p">}</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span>
|
||||
<span class="n">detail</span><span class="o">=</span><span class="s2">"Не удалось выключить UFW"</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Error: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="add_ufw_in_rules">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/ufw.html#api.v1.ufw.add_ufw_in_rules">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/rules/in"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">add_ufw_in_rules</span><span class="p">(</span><span class="n">rules</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">UFWRule</span><span class="p">]):</span>
|
||||
<span class="w"> </span><span class="sd">"""Добавляет входящие (in) правила UFW.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> rules (List[UFWRule]): Список правил, определяющих направления,</span>
|
||||
<span class="sd"> порты/диапазоны/протоколы и действия (allow/deny/reject).</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Итог выполнения с количеством успешно добавленных правил и деталями</span>
|
||||
<span class="sd"> по каждому правилу.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если UFW отключен (status_code=400) или при внутренних</span>
|
||||
<span class="sd"> ошибках (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">ufw_service</span> <span class="o">=</span> <span class="n">UFWService</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="c1"># Проверяем статус UFW</span>
|
||||
<span class="n">status</span> <span class="o">=</span> <span class="n">ufw_service</span><span class="o">.</span><span class="n">get_ufw_status</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">status</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span>
|
||||
<span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
|
||||
<span class="n">detail</span><span class="o">=</span><span class="s2">"UFW отключен. Включите UFW перед добавлением правил."</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">ufw_service</span><span class="o">.</span><span class="n">add_rules</span><span class="p">(</span><span class="n">rules</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
|
||||
<span class="n">successful_rules</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span>
|
||||
<span class="p">[</span><span class="n">r</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"results"</span><span class="p">]</span> <span class="k">if</span> <span class="n">r</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]])</span>
|
||||
<span class="n">total_rules</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="s2">"results"</span><span class="p">])</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span>
|
||||
<span class="s2">"message"</span><span class="p">:</span>
|
||||
<span class="sa">f</span><span class="s2">"Добавлено </span><span class="si">{</span><span class="n">successful_rules</span><span class="si">}</span><span class="s2"> из </span><span class="si">{</span><span class="n">total_rules</span><span class="si">}</span><span class="s2"> правил"</span><span class="p">,</span>
|
||||
<span class="s2">"details"</span><span class="p">:</span> <span class="n">result</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span>
|
||||
<span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span>
|
||||
<span class="n">detail</span><span class="o">=</span><span class="n">result</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"error"</span><span class="p">,</span> <span class="s2">"Не удалось добавить правила"</span><span class="p">),</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Error: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="add_ufw_out_rules">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/ufw.html#api.v1.ufw.add_ufw_out_rules">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/rules/out"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">add_ufw_out_rules</span><span class="p">(</span><span class="n">rules</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">UFWRule</span><span class="p">]):</span>
|
||||
<span class="w"> </span><span class="sd">"""Добавляет исходящие (out) правила UFW.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> rules (List[UFWRule]): Список правил исходящего трафика для добавления.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Объект статуса с сообщением об успешном добавлении.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: Если UFW отключен (status_code=400) или при внутренних</span>
|
||||
<span class="sd"> ошибках (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">ufw_service</span> <span class="o">=</span> <span class="n">UFWService</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="c1"># Проверяем статус UFW</span>
|
||||
<span class="n">status</span> <span class="o">=</span> <span class="n">ufw_service</span><span class="o">.</span><span class="n">get_ufw_status</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">status</span><span class="o">.</span><span class="n">enabled</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span>
|
||||
<span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
|
||||
<span class="n">detail</span><span class="o">=</span><span class="s2">"UFW отключен. Включите UFW перед добавлением правил."</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">success</span> <span class="o">=</span> <span class="n">ufw_service</span><span class="o">.</span><span class="n">add_ufw_out_rules</span><span class="p">(</span><span class="n">rules</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">success</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span>
|
||||
<span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Исходящие правила UFW успешно добавлены"</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span>
|
||||
<span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span>
|
||||
<span class="n">detail</span><span class="o">=</span><span class="s2">"Не удалось добавить исходящие правила UFW"</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Error: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="delete_ufw_rules">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/ufw.html#api.v1.ufw.delete_ufw_rules">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="s2">"/rules"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">delete_ufw_rules</span><span class="p">(</span><span class="n">rule_numbers</span><span class="p">:</span> <span class="n">RuleNumbers</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Удаляет правила UFW по их номерам.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> rule_numbers (RuleNumbers): Номера правил, подлежащих удалению (как в</span>
|
||||
<span class="sd"> выводе `ufw status numbered`).</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> dict: Информация об общем количестве удаляемых правил, числе успешных и</span>
|
||||
<span class="sd"> возможной ошибке.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> HTTPException: При ошибках удаления (status_code=500).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">ufw_service</span> <span class="o">=</span> <span class="n">UFWService</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">ufw_service</span><span class="o">.</span><span class="n">delete_rules</span><span class="p">(</span><span class="n">rule_numbers</span><span class="o">.</span><span class="n">numbers</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span>
|
||||
<span class="s2">"message"</span><span class="p">:</span>
|
||||
<span class="sa">f</span><span class="s2">"Удалено </span><span class="si">{</span><span class="n">result</span><span class="p">[</span><span class="s1">'successful'</span><span class="p">]</span><span class="si">}</span><span class="s2"> из </span><span class="si">{</span><span class="n">result</span><span class="p">[</span><span class="s1">'total'</span><span class="p">]</span><span class="si">}</span><span class="s2"> правил"</span><span class="p">,</span>
|
||||
<span class="s2">"details"</span><span class="p">:</span> <span class="n">result</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">result</span><span class="p">[</span><span class="s2">"error"</span><span class="p">])</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Error: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
||||
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
488
SRV/docs/_build/html/_modules/api/v1/websocket.html
vendored
Normal file
488
SRV/docs/_build/html/_modules/api/v1/websocket.html
vendored
Normal file
|
|
@ -0,0 +1,488 @@
|
|||
<!doctype html>
|
||||
<html class="no-js" lang="en" data-content_root="../../../">
|
||||
<head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../genindex.html"><link rel="search" title="Search" href="../../../search.html">
|
||||
|
||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
|
||||
<title>api.v1.websocket - GONETS SRV 0.0.3 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=d111a655" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo.css?v=580074bf" />
|
||||
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body {
|
||||
--color-code-background: #f2f2f2;
|
||||
--color-code-foreground: #1e1e1e;
|
||||
|
||||
}
|
||||
@media not print {
|
||||
body[data-theme="dark"] {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body:not([data-theme="light"]) {
|
||||
--color-code-background: #202020;
|
||||
--color-code-foreground: #d0d0d0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</style></head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||
</script>
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||
<title>Contents</title>
|
||||
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||
<title>Menu</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||
<title>Expand</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||
<polyline points="9 18 15 12 9 6"></polyline>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||
<title>Light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||
<title>Dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in light mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
|
||||
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
||||
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
||||
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
||||
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
||||
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
||||
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
||||
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
||||
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
||||
<circle cx="14.5" cy="9.55" r="3.6"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
||||
<title>Auto light/dark, in dark mode</title>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
||||
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
||||
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
|
||||
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
||||
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
||||
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
||||
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
||||
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
||||
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
||||
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
||||
<path d="M13.5 6.5l4 4" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
<symbol id="svg-eye" viewBox="0 0 24 24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
||||
<path
|
||||
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
|
||||
<path d="M20 21l2 -2l-2 -2" />
|
||||
<path d="M17 17l-2 2l2 2" />
|
||||
</svg>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
||||
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
||||
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
||||
<label class="overlay toc-overlay" for="__toc"></label>
|
||||
|
||||
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
||||
|
||||
|
||||
|
||||
<div class="page">
|
||||
<header class="mobile-header">
|
||||
<div class="header-left">
|
||||
<label class="nav-overlay-icon" for="__navigation">
|
||||
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="header-center">
|
||||
<a href="../../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<div class="theme-toggle-container theme-toggle-header">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<aside class="sidebar-drawer">
|
||||
<div class="sidebar-container">
|
||||
|
||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../../index.html">
|
||||
|
||||
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
|
||||
|
||||
</a><form class="sidebar-search-container" method="get" action="../../../search.html" role="search">
|
||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
</form>
|
||||
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/arp_service.html">ARP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/auth_service.html">Auth Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/connect_service.html">Connect Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/firewalld_service.html">Firewalld Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/ip_service.html">IP Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/network_service.html">Network Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/settings_service.html">Settings Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/subnet_service.html">Subnet Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/ufw_service.html">UFW Service</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/services/wifi_service.html">Wifi Service</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/auth.html">models.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/network.html">models.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/request.html">models.request</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/subnet.html">models.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/ufw.html">models.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/models/wifi.html">models.wifi</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/auth.html">api.v1.auth</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/ip.html">api.v1.ip</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/network.html">api.v1.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/settings.html">api.v1.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/subnet.html">api.v1.subnet</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/ufw.html">api.v1.ufw</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/endpoints/websocket.html">api.v1.websocket</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/cors.html">config.cors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/init_config.html">config.init_config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/config/ports.html">config.ports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/core/cli_executor.html">core.cli_executor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/storage/json_storage.html">storage.json_storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/storage/session_storage.html">storage.session_storage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../api/utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="../../../api/utils/i18n.html">utils.i18n</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div class="main">
|
||||
<div class="content">
|
||||
<div class="article-container">
|
||||
<a href="#" class="back-to-top muted-link">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||
</svg>
|
||||
<span>Back to top</span>
|
||||
</a>
|
||||
<div class="content-icon-container">
|
||||
<div class="theme-toggle-container theme-toggle-content">
|
||||
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
||||
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
||||
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
||||
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||
</button>
|
||||
</div>
|
||||
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
||||
</label>
|
||||
</div>
|
||||
<article role="main" id="furo-main-content">
|
||||
<h1>Source code for api.v1.websocket</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span><span class="w"> </span><span class="nn">asyncio</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">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Set</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">APIRouter</span><span class="p">,</span> <span class="n">WebSocket</span><span class="p">,</span> <span class="n">WebSocketDisconnect</span><span class="p">,</span> <span class="n">Depends</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">starlette.websockets</span><span class="w"> </span><span class="kn">import</span> <span class="n">WebSocketState</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="kn">from</span><span class="w"> </span><span class="nn">.network</span><span class="w"> </span><span class="kn">import</span> <span class="n">update_container_position</span><span class="p">,</span> <span class="n">get_network_data</span>
|
||||
|
||||
<span class="n">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">()</span>
|
||||
|
||||
<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>
|
||||
|
||||
<div class="viewcode-block" id="WebSocketManager">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/websocket.html#api.v1.websocket.WebSocketManager">[docs]</a>
|
||||
<span class="k">class</span><span class="w"> </span><span class="nc">WebSocketManager</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Класс для управления подключениями к WebSocket-серверу.</span>
|
||||
|
||||
<span class="sd"> Обрабатывает подключение, отключение и трансляцию сообщений для клиентов,</span>
|
||||
<span class="sd"> подключённых через WebSocket.</span>
|
||||
<span class="sd"> """</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="w"> </span><span class="sd">"""Инициализирует менеджер подключений к WebSocket-серверу.</span>
|
||||
|
||||
<span class="sd"> Создаёт пустое множество для хранения активных соединений.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">active_connections</span><span class="p">:</span> <span class="n">Set</span><span class="p">[</span><span class="n">WebSocket</span><span class="p">]</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
||||
|
||||
<div class="viewcode-block" id="WebSocketManager.connect">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/websocket.html#api.v1.websocket.WebSocketManager.connect">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">websocket</span><span class="p">:</span> <span class="n">WebSocket</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Подключает клиента к WebSocket-серверу.</span>
|
||||
|
||||
<span class="sd"> Принимает подключение и добавляет WebSocket в список активных соединений.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> websocket (WebSocket): Объект WebSocket для подключения.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> Exception: Если произошла ошибка при принятии подключения.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">await</span> <span class="n">websocket</span><span class="o">.</span><span class="n">accept</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">active_connections</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">websocket</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="WebSocketManager.disconnect">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/websocket.html#api.v1.websocket.WebSocketManager.disconnect">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">disconnect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">websocket</span><span class="p">:</span> <span class="n">WebSocket</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Отключает клиента от WebSocket-серверу.</span>
|
||||
|
||||
<span class="sd"> Удаляет WebSocket из списка активных соединений.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> websocket (WebSocket): Объект WebSocket для отключения.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">active_connections</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">websocket</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="WebSocketManager.broadcast">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/websocket.html#api.v1.websocket.WebSocketManager.broadcast">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">broadcast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">dict</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Транслирует сообщения всем подключённым клиентам.</span>
|
||||
|
||||
<span class="sd"> Отправляет JSON-данные всем активным соединениям, обрабатывая</span>
|
||||
<span class="sd"> отключения клиентов.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> message (dict): Сообщение для трансляции в формате JSON.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> WebSocketDisconnect: Если клиент неожиданно отключился.</span>
|
||||
<span class="sd"> Exception: Если произошла другая ошибка при отправке.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">for</span> <span class="n">connection</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">active_connections</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">connection</span><span class="o">.</span><span class="n">client_state</span> <span class="o">==</span> <span class="n">WebSocketState</span><span class="o">.</span><span class="n">CONNECTED</span><span class="p">:</span>
|
||||
<span class="k">await</span> <span class="n">connection</span><span class="o">.</span><span class="n">send_json</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="n">WebSocketDisconnect</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">disconnect</span><span class="p">(</span><span class="n">connection</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Broadcast error: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">disconnect</span><span class="p">(</span><span class="n">connection</span><span class="p">)</span></div>
|
||||
</div>
|
||||
|
||||
|
||||
<span class="n">manager</span> <span class="o">=</span> <span class="n">WebSocketManager</span><span class="p">()</span>
|
||||
|
||||
<div class="viewcode-block" id="websocket_endpoint">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/websocket.html#api.v1.websocket.websocket_endpoint">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">websocket</span><span class="p">(</span><span class="s2">"/api/v1"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">websocket_endpoint</span><span class="p">(</span><span class="n">websocket</span><span class="p">:</span> <span class="n">WebSocket</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="w"> </span><span class="sd">"""Обработчик WebSocket-соединения.</span>
|
||||
|
||||
<span class="sd"> Управляет соединением клиента, принимает данные для обновления позиций</span>
|
||||
<span class="sd"> контейнеров и транслирует сетевые данные.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> websocket (WebSocket): Объект WebSocket для обработки соединения.</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> WebSocketDisconnect: Если клиент отключился.</span>
|
||||
<span class="sd"> Exception: Если произошла ошибка при обработке данных.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">await</span> <span class="n">manager</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">websocket</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">websocket</span><span class="o">.</span><span class="n">receive_json</span><span class="p">()</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Received data: </span><span class="si">{</span><span class="n">data</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="n">key</span> <span class="ow">in</span> <span class="n">data</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"container_id"</span><span class="p">,</span> <span class="s2">"container_x"</span><span class="p">,</span> <span class="s2">"container_y"</span><span class="p">]):</span>
|
||||
<span class="k">await</span> <span class="n">update_container_position</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
|
||||
<span class="n">network_data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">get_network_data</span><span class="p">()</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Current network data: </span><span class="si">{</span><span class="n">network_data</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">await</span> <span class="n">manager</span><span class="o">.</span><span class="n">broadcast</span><span class="p">(</span><span class="n">network_data</span><span class="p">)</span>
|
||||
<span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="n">WebSocketDisconnect</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Client disconnected"</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error in websocket_endpoint: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">finally</span><span class="p">:</span>
|
||||
<span class="n">manager</span><span class="o">.</span><span class="n">disconnect</span><span class="p">(</span><span class="n">websocket</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">websocket</span><span class="o">.</span><span class="n">client_state</span> <span class="o">!=</span> <span class="n">WebSocketState</span><span class="o">.</span><span class="n">DISCONNECTED</span><span class="p">:</span>
|
||||
<span class="k">await</span> <span class="n">websocket</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="startup_event">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/websocket.html#api.v1.websocket.startup_event">[docs]</a>
|
||||
<span class="nd">@router</span><span class="o">.</span><span class="n">on_event</span><span class="p">(</span><span class="s2">"startup"</span><span class="p">)</span>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">startup_event</span><span class="p">():</span>
|
||||
<span class="w"> </span><span class="sd">"""Запуск таска для трансляции сетевых данных при старте приложения.</span>
|
||||
|
||||
<span class="sd"> Создаёт асинхронную задачу для периодической трансляции данных.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> Exception: Если произошла ошибка при запуске таска.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">asyncio</span><span class="o">.</span><span class="n">create_task</span><span class="p">(</span><span class="n">broadcast_data</span><span class="p">())</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="broadcast_data">
|
||||
<a class="viewcode-back" href="../../../api/endpoints/websocket.html#api.v1.websocket.broadcast_data">[docs]</a>
|
||||
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">broadcast_data</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="w"> </span><span class="sd">"""Таск для периодической трансляции сетевых данных.</span>
|
||||
|
||||
<span class="sd"> Выполняет сканирование сети и отправляет данные всем подключённым клиентам</span>
|
||||
<span class="sd"> с интервалом в 2 секунды.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> translations: Объект переводов для текущего языка.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> Exception: Если произошла ошибка при получении данных или трансляции.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">network_data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">get_network_data</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="s2">"activation"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">network_data</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка: Ключ 'activation' отсутствует в полученных данных сети"</span><span class="p">))</span>
|
||||
<span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="k">continue</span>
|
||||
|
||||
<span class="k">await</span> <span class="n">manager</span><span class="o">.</span><span class="n">broadcast</span><span class="p">(</span><span class="n">network_data</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error in broadcast_data: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span></div>
|
||||
|
||||
</pre></div>
|
||||
</article>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<div class="related-pages">
|
||||
|
||||
|
||||
</div>
|
||||
<div class="bottom-of-page">
|
||||
<div class="left-details">
|
||||
<div class="copyright">
|
||||
Copyright © 2025, GONETS
|
||||
</div>
|
||||
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||
|
||||
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||
|
||||
</div>
|
||||
<div class="right-details">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<aside class="toc-drawer no-toc">
|
||||
|
||||
|
||||
|
||||
</aside>
|
||||
</div>
|
||||
</div><script src="../../../_static/documentation_options.js?v=47de8214"></script>
|
||||
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<script src="../../../_static/scripts/furo.js?v=46bd48cc"></script>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue