Repair docs (html, md). Update docstrings

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

View file

@ -172,7 +172,7 @@
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-header-icon" for="__toc">
<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>
@ -276,86 +276,102 @@
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-content-icon" for="__toc">
<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">
<section id="module-storage.json_storage">
<span id="storage-json-storage"></span><h1>storage.json_storage<a class="headerlink" href="#module-storage.json_storage" title="Link to this heading"></a></h1>
<section id="storage-json-storage">
<h1>storage.json_storage<a class="headerlink" href="#storage-json-storage" title="Link to this heading"></a></h1>
<dl class="py class">
<dt class="sig sig-object py" id="storage.json_storage.JsonStorage">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">storage.json_storage.</span></span><span class="sig-name descname"><span class="pre">JsonStorage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'/etc/gonets/users.json'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/storage/json_storage.html#JsonStorage"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#storage.json_storage.JsonStorage" title="Link to this definition"></a></dt>
<dt class="sig sig-object py">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">storage.json_storage.</span></span><span class="sig-name descname"><span class="pre">JsonStorage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/storage/json_storage.html#JsonStorage"><span class="viewcode-link"><span class="pre">[source]</span></span></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Хранилище пользователей в JSON-файле.</p>
<dl>
<dt>Назначение:</dt><dd><p>Обеспечивает простое файловое хранилище для учетных записей пользователей
без полноценной СУБД. Подходит для встраиваемых окружений и сценариев,
где важна минимальная зависимость от внешних сервисов.</p>
<p>Назначение:</p>
<ul class="simple">
<li><p>Обеспечивает простое файловое хранилище учетных записей без полноценной СУБД.</p></li>
<li><p>Подходит для встраиваемых окружений, где критична минимальная зависимость от внешних сервисов.</p></li>
</ul>
<p>Формат данных:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
<span class="s2">&quot;users&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="s2">&quot;username&quot;</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="s2">&quot;password_hash&quot;</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="s2">&quot;is_admin&quot;</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">&quot;next_id&quot;</span><span class="p">:</span> <span class="nb">int</span>
<span class="p">}</span>
</pre></div>
</div>
<p>Безопасность:</p>
<ul class="simple">
<li><p>Пароли никогда не сохраняются в открытом виде: используется <cite>passlib.context.CryptContext</cite> со схемой <cite>bcrypt</cite>.</p></li>
<li><p>Файл создаётся с правами доступа <code class="docutils literal notranslate"><span class="pre">0o600</span></code> (чтение/запись только владельцу).</p></li>
</ul>
<p>Ограничения:</p>
<ul class="simple">
<li><p>Нет блокировок для конкурентного доступа — в многопроцессной среде требуется внешняя синхронизация.</p></li>
<li><p>Значение пути по умолчанию <code class="docutils literal notranslate"><span class="pre">/etc/gonets/users.json</span></code> предполагает наличие прав на запись и предварительную настройку окружения.</p></li>
</ul>
<dl class="py method">
<dt class="sig sig-object py">
<span class="sig-name descname"><span class="pre">create_user</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">UserCreate</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">UserResponse</span></span></span><a class="reference internal" href="../../_modules/storage/json_storage.html#JsonStorage.create_user"><span class="viewcode-link"><span class="pre">[source]</span></span></a></dt>
<dd><p>Создаёт нового пользователя с хешированием пароля.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>user</strong> (<em>UserCreate</em>) – Объект с данными нового пользователя (username, password, is_admin).</p>
</dd>
<dt>Формат данных:</dt><dd><p>JSON-структура вида:
{</p>
<blockquote>
<div><dl class="simple">
<dt>“users”: [</dt><dd><p>{“id”: int, “username”: str, “password_hash”: str, “is_admin”: bool},
…</p>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>Объект с данными созданного пользователя (id, username, is_admin).</p>
</dd>
</dl>
<p>],
“next_id”: int</p>
</div></blockquote>
<p>}</p>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>UserResponse</p>
</dd>
<dt>Безопасность:</dt><dd><p>Пароли никогда не сохраняются в открытом виде. Для хеширования используется
<cite>passlib.context.CryptContext</cite> со схемой <cite>bcrypt</cite>. Файл создаётся с правами
доступа <cite>0o600</cite> (только владелец).</p>
</dd>
<dt>Ограничения и замечания:</dt><dd><ul class="simple">
<li><p>Отсутствует конкурентный доступ/блокировки файла — при использовании в
многопроцессной среде может потребоваться внешняя синхронизация.</p></li>
<li><p>Имя файла и каталог по умолчанию <cite>/etc/gonets/users.json</cite> предполагают
наличие прав на запись и предварительную подготовку окружения.</p></li>
<dt class="field-even">Raises<span class="colon">:</span></dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>ValueError</strong> – Если пользователь с таким именем уже существует.</p></li>
<li><p><strong>Exception</strong> – Если произошла ошибка при записи данных.</p></li>
</ul>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="storage.json_storage.JsonStorage.create_user">
<span class="sig-name descname"><span class="pre">create_user</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="../models/auth.html#models.auth.UserCreate" title="models.auth.UserCreate"><span class="pre">UserCreate</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="../models/auth.html#models.auth.UserResponse" title="models.auth.UserResponse"><span class="pre">UserResponse</span></a></span></span><a class="reference internal" href="../../_modules/storage/json_storage.html#JsonStorage.create_user"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#storage.json_storage.JsonStorage.create_user" title="Link to this definition"></a></dt>
<dd><p>Создаёт нового пользователя с хешированием пароля.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>user (UserCreate): Объект с данными нового пользователя (username, password, is_admin).</p>
</dd>
<dt>Returns:</dt><dd><p>UserResponse: Объект с данными созданного пользователя (id, username, is_admin).</p>
</dd>
<dt>Raises:</dt><dd><p>ValueError: Если пользователь с таким именем уже существует.
Exception: Если произошла ошибка при записи данных.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="storage.json_storage.JsonStorage.get_user_by_username">
<span class="sig-name descname"><span class="pre">get_user_by_username</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">dict</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span></span><a class="reference internal" href="../../_modules/storage/json_storage.html#JsonStorage.get_user_by_username"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#storage.json_storage.JsonStorage.get_user_by_username" title="Link to this definition"></a></dt>
<dt class="sig sig-object py">
<span class="sig-name descname"><span class="pre">get_user_by_username</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">dict</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span></span><a class="reference internal" href="../../_modules/storage/json_storage.html#JsonStorage.get_user_by_username"><span class="viewcode-link"><span class="pre">[source]</span></span></a></dt>
<dd><p>Получает данные пользователя по имени.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>username (str): Имя пользователя для поиска.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>username</strong> (<em>str</em>) – Имя пользователя для поиска.</p>
</dd>
<dt>Returns:</dt><dd><p>Optional[dict]: Словарь с данными пользователя или None, если пользователь не найден.</p>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>Словарь с данными пользователя или None, если пользователь не найден.</p>
</dd>
<dt>Raises:</dt><dd><p>Exception: Если произошла ошибка при чтении файла.</p>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>Optional[dict]</p>
</dd>
<dt class="field-even">Raises<span class="colon">:</span></dt>
<dd class="field-even"><p><strong>Exception</strong> – Если произошла ошибка при чтении файла.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="storage.json_storage.JsonStorage.verify_password">
<span class="sig-name descname"><span class="pre">verify_password</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">plain_password</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">hashed_password</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="reference internal" href="../../_modules/storage/json_storage.html#JsonStorage.verify_password"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#storage.json_storage.JsonStorage.verify_password" title="Link to this definition"></a></dt>
<dt class="sig sig-object py">
<span class="sig-name descname"><span class="pre">verify_password</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">plain_password</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">hashed_password</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="reference internal" href="../../_modules/storage/json_storage.html#JsonStorage.verify_password"><span class="viewcode-link"><span class="pre">[source]</span></span></a></dt>
<dd><p>Проверяет соответствие введённого пароля хэшированному.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>plain_password (str): Введённый пользователем пароль.
hashed_password (str): Хэшированный пароль из хранилища.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>plain_password</strong> (<em>str</em>) – Введённый пользователем пароль.</p></li>
<li><p><strong>hashed_password</strong> (<em>str</em>) – Хэшированный пароль из хранилища.</p></li>
</ul>
</dd>
<dt>Returns:</dt><dd><p>bool: True, если пароль верен, False в противном случае.</p>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>True, если пароль верен, False в противном случае.</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>bool</p>
</dd>
</dl>
</dd></dl>
@ -407,33 +423,9 @@ hashed_password (str): Хэшированный пароль из хранили
</footer>
</div>
<aside class="toc-drawer">
<aside class="toc-drawer no-toc">
<div class="toc-sticky toc-scroll">
<div class="toc-title-container">
<span class="toc-title">
On this page
</span>
</div>
<div class="toc-tree-container">
<div class="toc-tree">
<ul>
<li><a class="reference internal" href="#">storage.json_storage</a><ul>
<li><a class="reference internal" href="#storage.json_storage.JsonStorage"><code class="docutils literal notranslate"><span class="pre">JsonStorage</span></code></a><ul>
<li><a class="reference internal" href="#storage.json_storage.JsonStorage.create_user"><code class="docutils literal notranslate"><span class="pre">JsonStorage.create_user()</span></code></a></li>
<li><a class="reference internal" href="#storage.json_storage.JsonStorage.get_user_by_username"><code class="docutils literal notranslate"><span class="pre">JsonStorage.get_user_by_username()</span></code></a></li>
<li><a class="reference internal" href="#storage.json_storage.JsonStorage.verify_password"><code class="docutils literal notranslate"><span class="pre">JsonStorage.verify_password()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</aside>
</div>

View file

@ -172,7 +172,7 @@
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-header-icon" for="__toc">
<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>
@ -276,114 +276,137 @@
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-content-icon" for="__toc">
<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">
<section id="module-storage.session_storage">
<span id="storage-session-storage"></span><h1>storage.session_storage<a class="headerlink" href="#module-storage.session_storage" title="Link to this heading"></a></h1>
<section id="storage-session-storage">
<h1>storage.session_storage<a class="headerlink" href="#storage-session-storage" title="Link to this heading"></a></h1>
<dl class="py class">
<dt class="sig sig-object py" id="storage.session_storage.SessionStorage">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">storage.session_storage.</span></span><span class="sig-name descname"><span class="pre">SessionStorage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'/etc/gonets/sessions.json'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/storage/session_storage.html#SessionStorage"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#storage.session_storage.SessionStorage" title="Link to this definition"></a></dt>
<dt class="sig sig-object py">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">storage.session_storage.</span></span><span class="sig-name descname"><span class="pre">SessionStorage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/storage/session_storage.html#SessionStorage"><span class="viewcode-link"><span class="pre">[source]</span></span></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Хранилище сессий пользователей в JSON-файле.</p>
<dl>
<dt>Назначение:</dt><dd><p>Лёгкое файловое хранилище для сессионных токенов, сопоставленных с
<cite>client_id</cite> (например, IP клиента). Предназначено для сред без БД и
persistent-кэшей. Обеспечивает базовые операции и авто-очистку протухших
сессий.</p>
</dd>
<dt>Формат данных:</dt><dd><dl>
<dt>{</dt><dd><dl class="simple">
<dt>“sessions”: {</dt><dd><dl class="simple">
<dt>“&lt;session_id&gt;”: {</dt><dd><p>“username”: str,
“token”: str,
“client_id”: str,
“created_at”: ISO8601 str,
“expiry”: ISO8601 str</p>
<p>Назначение:</p>
<ul class="simple">
<li><p>Лёгкое файловое хранилище сессионных токенов, сопоставленных с <code class="docutils literal notranslate"><span class="pre">client_id</span></code> (например, IP клиента).</p></li>
<li><p>Предназначено для сред без БД и persistent-кэшей; обеспечивает простые операции и автоочистку истёкших сессий.</p></li>
</ul>
<p>Формат данных:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
<span class="s2">&quot;sessions&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;&lt;session_id&gt;&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;username&quot;</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
<span class="s2">&quot;token&quot;</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
<span class="s2">&quot;client_id&quot;</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
<span class="s2">&quot;created_at&quot;</span><span class="p">:</span> <span class="n">ISO8601</span> <span class="nb">str</span><span class="p">,</span>
<span class="s2">&quot;expiry&quot;</span><span class="p">:</span> <span class="n">ISO8601</span> <span class="nb">str</span>
<span class="p">},</span>
<span class="o">...</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
</div>
<p>Политика TTL:</p>
<ul class="simple">
<li><p>Каждая сессия действует 30 минут; метод <code class="docutils literal notranslate"><span class="pre">clean_expired_sessions</span></code> удаляет записи с истёкшим сроком.</p></li>
</ul>
<p>Ограничения:</p>
<ul class="simple">
<li><p>Отсутствуют файловые блокировки — в многопроцессной среде возможны гонки.</p></li>
<li><p>Путь по умолчанию <code class="docutils literal notranslate"><span class="pre">/etc/gonets/sessions.json</span></code> требует прав на запись.</p></li>
</ul>
<dl class="py method">
<dt class="sig sig-object py">
<span class="sig-name descname"><span class="pre">clean_expired_sessions</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/storage/session_storage.html#SessionStorage.clean_expired_sessions"><span class="viewcode-link"><span class="pre">[source]</span></span></a></dt>
<dd><p>Удаляет все истекшие сессии из хранилища.</p>
<dl class="field-list simple">
<dt class="field-odd">Raises<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>Exception</strong> – Если произошла ошибка при чтении или записи данных.</p>
</dd>
</dl>
</dd>
</dl>
<p>}</p>
</dd>
</dl>
<p>}</p>
</dd>
<dt>Политика TTL:</dt><dd><p>Каждая сессия действует 30 минут. При создании/чтении/удалении вызывается
<cite>clean_expired_sessions()</cite> для удаления протухших записей.</p>
</dd>
<dt>Ограничения:</dt><dd><ul class="simple">
<li><p>Нет файловых блокировок: в многопроцессных конфигурациях возможны гонки.</p></li>
<li><p>Размещение по умолчанию <cite>/etc/gonets/sessions.json</cite> требует прав на запись.</p></li>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Проверяет срок действия каждой сессии и удаляет те, что истекли,
записывая обновлённые данные.</p>
</div>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py">
<span class="sig-name descname"><span class="pre">create_session</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">token</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">client_id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="reference internal" href="../../_modules/storage/session_storage.html#SessionStorage.create_session"><span class="viewcode-link"><span class="pre">[source]</span></span></a></dt>
<dd><p>Создаёт новую сессию и возвращает уникальный session_id.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>username</strong> (<em>str</em>) – Имя пользователя, для которого создаётся сессия.</p></li>
<li><p><strong>token</strong> (<em>str</em>) – Токен аутентификации.</p></li>
<li><p><strong>client_id</strong> (<em>str</em>) – Идентификатор клиента.</p></li>
</ul>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="storage.session_storage.SessionStorage.clean_expired_sessions">
<span class="sig-name descname"><span class="pre">clean_expired_sessions</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/storage/session_storage.html#SessionStorage.clean_expired_sessions"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#storage.session_storage.SessionStorage.clean_expired_sessions" title="Link to this definition"></a></dt>
<dd><p>Удаляет все истекшие сессии из хранилища.</p>
<dl class="simple">
<dt>Raises:</dt><dd><p>Exception: Если произошла ошибка при чтении или записи данных.</p>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>Уникальный идентификатор сессии (session_id).</p>
</dd>
<dt>Note:</dt><dd><p>Проверяет срок действия каждой сессии и удаляет те, что истекли,
записывая обновлённые данные.</p>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>str</p>
</dd>
<dt class="field-even">Raises<span class="colon">:</span></dt>
<dd class="field-even"><p><strong>Exception</strong> – Если произошла ошибка при создании или записи сессии.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="storage.session_storage.SessionStorage.create_session">
<span class="sig-name descname"><span class="pre">create_session</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">token</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">client_id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="reference internal" href="../../_modules/storage/session_storage.html#SessionStorage.create_session"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#storage.session_storage.SessionStorage.create_session" title="Link to this definition"></a></dt>
<dd><p>Создаёт новую сессию и возвращает уникальный session_id.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>username (str): Имя пользователя, для которого создаётся сессия.
token (str): Токен аутентификации.
client_id (str): Идентификатор клиента.</p>
</dd>
<dt>Returns:</dt><dd><p>str: Уникальный идентификатор сессии (session_id).</p>
</dd>
<dt>Raises:</dt><dd><p>Exception: Если произошла ошибка при создании или записи сессии.</p>
</dd>
<dt>Note:</dt><dd><p>Удаляет истекшие сессии перед созданием новой и устанавливает срок
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Удаляет истекшие сессии перед созданием новой и устанавливает срок
действия 30 минут.</p>
</dd>
</dl>
</div>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="storage.session_storage.SessionStorage.delete_session">
<span class="sig-name descname"><span class="pre">delete_session</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">session_id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/storage/session_storage.html#SessionStorage.delete_session"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#storage.session_storage.SessionStorage.delete_session" title="Link to this definition"></a></dt>
<dt class="sig sig-object py">
<span class="sig-name descname"><span class="pre">delete_session</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">session_id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/storage/session_storage.html#SessionStorage.delete_session"><span class="viewcode-link"><span class="pre">[source]</span></span></a></dt>
<dd><p>Удаляет сессию по указанному session_id.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>session_id (str): Уникальный идентификатор сессии.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>session_id</strong> (<em>str</em>) – Уникальный идентификатор сессии.</p>
</dd>
<dt>Raises:</dt><dd><p>Exception: Если произошла ошибка при чтении или записи данных.</p>
</dd>
<dt>Note:</dt><dd><p>Очищает истекшие сессии перед удалением.</p>
<dt class="field-even">Raises<span class="colon">:</span></dt>
<dd class="field-even"><p><strong>Exception</strong> – Если произошла ошибка при чтении или записи данных.</p>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Очищает истекшие сессии перед удалением.</p>
</div>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="storage.session_storage.SessionStorage.get_latest_session">
<span class="sig-name descname"><span class="pre">get_latest_session</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client_id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Dict</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span></span><a class="reference internal" href="../../_modules/storage/session_storage.html#SessionStorage.get_latest_session"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#storage.session_storage.SessionStorage.get_latest_session" title="Link to this definition"></a></dt>
<dt class="sig sig-object py">
<span class="sig-name descname"><span class="pre">get_latest_session</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client_id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Dict</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span></span><a class="reference internal" href="../../_modules/storage/session_storage.html#SessionStorage.get_latest_session"><span class="viewcode-link"><span class="pre">[source]</span></span></a></dt>
<dd><p>Получает последнюю активную сессию для указанного client_id.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>client_id (str): Идентификатор клиента.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>client_id</strong> (<em>str</em>) – Идентификатор клиента.</p>
</dd>
<dt>Returns:</dt><dd><dl class="simple">
<dt>Optional[Dict]: Словарь с данными последней активной сессии, включая</dt><dd><p>“session_id”, или None, если сессия не найдена.</p>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><dl class="simple">
<dt>Словарь с данными последней активной сессии, включая</dt><dd><p>”session_id”, или None, если сессия не найдена.</p>
</dd>
</dl>
</p>
</dd>
<dt>Raises:</dt><dd><p>Exception: Если произошла ошибка при чтении или обработке данных.</p>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>Optional[Dict]</p>
</dd>
<dt>Note:</dt><dd><p>Очищает истекшие сессии перед поиском и возвращает сессию с самым
<dt class="field-even">Raises<span class="colon">:</span></dt>
<dd class="field-even"><p><strong>Exception</strong> – Если произошла ошибка при чтении или обработке данных.</p>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Очищает истекшие сессии перед поиском и возвращает сессию с самым
поздним временем создания.</p>
</dd>
</dl>
</div>
</dd></dl>
</dd></dl>
@ -433,34 +456,9 @@ client_id (str): Идентификатор клиента.</p>
</footer>
</div>
<aside class="toc-drawer">
<aside class="toc-drawer no-toc">
<div class="toc-sticky toc-scroll">
<div class="toc-title-container">
<span class="toc-title">
On this page
</span>
</div>
<div class="toc-tree-container">
<div class="toc-tree">
<ul>
<li><a class="reference internal" href="#">storage.session_storage</a><ul>
<li><a class="reference internal" href="#storage.session_storage.SessionStorage"><code class="docutils literal notranslate"><span class="pre">SessionStorage</span></code></a><ul>
<li><a class="reference internal" href="#storage.session_storage.SessionStorage.clean_expired_sessions"><code class="docutils literal notranslate"><span class="pre">SessionStorage.clean_expired_sessions()</span></code></a></li>
<li><a class="reference internal" href="#storage.session_storage.SessionStorage.create_session"><code class="docutils literal notranslate"><span class="pre">SessionStorage.create_session()</span></code></a></li>
<li><a class="reference internal" href="#storage.session_storage.SessionStorage.delete_session"><code class="docutils literal notranslate"><span class="pre">SessionStorage.delete_session()</span></code></a></li>
<li><a class="reference internal" href="#storage.session_storage.SessionStorage.get_latest_session"><code class="docutils literal notranslate"><span class="pre">SessionStorage.get_latest_session()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</aside>
</div>