From ec054bbaad96c0412a7ea35e51291f4f7d914d7e Mon Sep 17 00:00:00 2001 From: "s.galanskiy" Date: Tue, 15 Jul 2025 15:12:01 +0500 Subject: [PATCH] =?UTF-8?q?=D0=95=D0=B4=D0=B8=D0=BD=D0=B0=D1=8F=20=D0=B8?= =?UTF-8?q?=D0=BD=D1=82=D0=B5=D1=80=D0=BD=D0=B0=D1=86=D0=B8=D0=BE=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=B5=D1=80=D0=B0=20=D0=B1=D0=B5=D0=B7=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SRV/api/v1/auth.py | 10 +- SRV/api/v1/ip.py | 14 +- SRV/api/v1/network.py | 8 +- SRV/api/v1/settings.py | 15 +- SRV/api/v1/subnet.py | 22 +- SRV/api/v1/websocket.py | 4 +- SRV/babel.cfg | 38 +- SRV/locales/en/LC_MESSAGES/api_v1.mo | Bin 5868 -> 0 bytes SRV/locales/en/LC_MESSAGES/api_v1.po | 234 ---------- SRV/locales/en/LC_MESSAGES/messages.mo | Bin 0 -> 10957 bytes SRV/locales/en/LC_MESSAGES/messages.po | 473 ++++++++++++++++++++ SRV/locales/en/LC_MESSAGES/services.mo | Bin 5499 -> 0 bytes SRV/locales/en/LC_MESSAGES/services.po | 261 ----------- SRV/locales/ru/LC_MESSAGES/api_v1.mo | Bin 7283 -> 0 bytes SRV/locales/ru/LC_MESSAGES/api_v1.po | 237 ---------- SRV/locales/ru/LC_MESSAGES/messages.mo | Bin 0 -> 13491 bytes SRV/locales/ru/LC_MESSAGES/messages.po | 478 ++++++++++++++++++++ SRV/locales/ru/LC_MESSAGES/services.mo | Bin 6727 -> 0 bytes SRV/locales/ru/LC_MESSAGES/services.po | 256 ----------- SRV/poetry.lock | 596 ++++++++++++------------- SRV/services/arp_service.py | 2 +- SRV/services/auth_service.py | 2 +- SRV/services/connect_service.py | 2 +- SRV/services/ip_service.py | 19 +- SRV/services/network_service.py | 2 +- SRV/services/settings_service.py | 2 +- SRV/services/subnet_service.py | 10 +- SRV/services/wifi_service.py | 4 +- SRV/utils/i18n.py | 36 +- 29 files changed, 1313 insertions(+), 1412 deletions(-) delete mode 100644 SRV/locales/en/LC_MESSAGES/api_v1.mo delete mode 100644 SRV/locales/en/LC_MESSAGES/api_v1.po create mode 100644 SRV/locales/en/LC_MESSAGES/messages.mo create mode 100644 SRV/locales/en/LC_MESSAGES/messages.po delete mode 100644 SRV/locales/en/LC_MESSAGES/services.mo delete mode 100644 SRV/locales/en/LC_MESSAGES/services.po delete mode 100644 SRV/locales/ru/LC_MESSAGES/api_v1.mo delete mode 100644 SRV/locales/ru/LC_MESSAGES/api_v1.po create mode 100644 SRV/locales/ru/LC_MESSAGES/messages.mo create mode 100644 SRV/locales/ru/LC_MESSAGES/messages.po delete mode 100644 SRV/locales/ru/LC_MESSAGES/services.mo delete mode 100644 SRV/locales/ru/LC_MESSAGES/services.po diff --git a/SRV/api/v1/auth.py b/SRV/api/v1/auth.py index 633ed0f..a6de017 100644 --- a/SRV/api/v1/auth.py +++ b/SRV/api/v1/auth.py @@ -16,7 +16,7 @@ auth_service = AuthService() oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/auth/login") @router.post("/register", response_model=UserResponse) -async def register(user: UserCreate, translations: Translations = Depends(get_translations("api_v1"))): +async def register(user: UserCreate, translations: Translations = Depends(get_translations())): """Регистрирует нового пользователя. Создаёт нового пользователя на основе предоставленных данных и возвращает @@ -44,7 +44,7 @@ async def register(user: UserCreate, translations: Translations = Depends(get_tr raise HTTPException(status_code=500, detail=translations.gettext("Не удалось зарегистрировать пользователя")) @router.post("/login", response_model=Token) -async def login(user: UserLogin, request: Request, translations: Translations = Depends(get_translations("api_v1"))): +async def login(user: UserLogin, request: Request, translations: Translations = Depends(get_translations())): """Авторизует пользователя и создаёт сессию. Проверяет учетные данные пользователя и возвращает токен и session_id для @@ -75,7 +75,7 @@ async def login(user: UserLogin, request: Request, translations: Translations = raise HTTPException(status_code=500, detail=translations.gettext("Не удалось авторизовать пользователя")) @router.get("/me") -async def get_current_user(request: Request, translations: Translations = Depends(get_translations("api_v1"))): +async def get_current_user(request: Request, translations: Translations = Depends(get_translations())): """Возвращает данные текущего пользователя и токен. Проверяет активную сессию по client_id и возвращает информацию о пользователе @@ -109,7 +109,7 @@ async def get_current_user(request: Request, translations: Translations = Depend raise HTTPException(status_code=500, detail=translations.gettext("Не удалось получить данные пользователя")) @router.get("/logout") -async def logout(request: Request, translations: Translations = Depends(get_translations("api_v1"))): +async def logout(request: Request, translations: Translations = Depends(get_translations())): """Выход из системы, удаление сессии. Удаляет активную сессию пользователя по client_id. @@ -136,7 +136,7 @@ async def logout(request: Request, translations: Translations = Depends(get_tran raise HTTPException(status_code=500, detail=translations.gettext("Не удалось выйти из системы")) @router.get("/check_json") -async def check_users_file(translations: Translations = Depends(get_translations("api_v1"))): +async def check_users_file(translations: Translations = Depends(get_translations())): """Проверяет, существует ли файл users.json и содержит ли он пользователей. Возвращает информацию о состоянии файла и наличии пользователей. diff --git a/SRV/api/v1/ip.py b/SRV/api/v1/ip.py index de1896c..efa116e 100644 --- a/SRV/api/v1/ip.py +++ b/SRV/api/v1/ip.py @@ -1,14 +1,14 @@ from typing import Dict, Any from fastapi import APIRouter, Body, HTTPException, Depends from services.ip_service import IPService -from utils.i18n import get_translations, _ +from utils.i18n import get_translations from babel.support import Translations router = APIRouter() ip_service = IPService() @router.post("/check_ip") -async def check_ip_config(data: Dict[str, Any] = Body(...), translations: Translations = Depends(get_translations("api_v1"))): +async def check_ip_config(data: Dict[str, Any] = Body(...), translations: Translations = Depends(get_translations())): """Проверяет доступность IP-адреса перед его применением. Выполняет ARP-сканирование для проверки, занят ли указанный IP-адрес, @@ -28,7 +28,7 @@ async def check_ip_config(data: Dict[str, Any] = Body(...), translations: Transl HTTPException: Если произошла внутренняя ошибка (status_code=500). """ try: - result = await ip_service.check_ip_config(data) + result = await ip_service.check_ip_config(data, translations) return result except Exception as e: raise HTTPException( @@ -37,7 +37,7 @@ async def check_ip_config(data: Dict[str, Any] = Body(...), translations: Transl ) @router.post("/apply_ip") -async def apply_ip_config(data: Dict[str, Any] = Body(...), translations: Translations = Depends(get_translations("api_v1"))): +async def apply_ip_config(data: Dict[str, Any] = Body(...), translations: Translations = Depends(get_translations())): """Применяет проверенные IP-настройки к указанному сетевому профилю. Обновляет настройки соединения через NetworkManager, отключает и @@ -58,7 +58,7 @@ async def apply_ip_config(data: Dict[str, Any] = Body(...), translations: Transl произошла внутренняя ошибка (status_code=500). """ try: - await ip_service.apply_ip_config(data) + await ip_service.apply_ip_config(data, translations) return { "success": True, "message": translations.gettext("Настройки сетевого профиля для {connection_id} применены").format( @@ -74,7 +74,7 @@ async def apply_ip_config(data: Dict[str, Any] = Body(...), translations: Transl ) @router.post("/save_ip") -async def save_ip_config(data: Dict[str, Any] = Body(...), translations: Translations = Depends(get_translations("api_v1"))): +async def save_ip_config(data: Dict[str, Any] = Body(...), translations: Translations = Depends(get_translations())): """Применяет проверенные IP-настройки для отката сетевого профиля. Используется для сохранения и отката настроек сетевого профиля к предыдущему @@ -95,7 +95,7 @@ async def save_ip_config(data: Dict[str, Any] = Body(...), translations: Transla произошла внутренняя ошибка (status_code=500). """ try: - await ip_service.apply_ip_config(data) + await ip_service.apply_ip_config(data, translations) return { "success": True, "message": translations.gettext("Настройки сетевого профиля для {connection_id} применены").format( diff --git a/SRV/api/v1/network.py b/SRV/api/v1/network.py index bab3933..d298887 100644 --- a/SRV/api/v1/network.py +++ b/SRV/api/v1/network.py @@ -44,7 +44,7 @@ class ContainerPositionManager: }, } - def get_position_and_state(self, container_name: str, translations: Translations = Depends(get_translations("api_v1"))) -> Tuple[int, int, bool]: + def get_position_and_state(self, container_name: str, translations: Translations = Depends(get_translations())) -> Tuple[int, int, bool]: """Получает текущие координаты и состояние указанного контейнера. Args: @@ -79,7 +79,7 @@ class ContainerPositionManager: container_manager = ContainerPositionManager() -async def get_network_data(translations: Translations = Depends(get_translations("api_v1"))) -> Dict[str, Dict]: +async def get_network_data(translations: Translations = Depends(get_translations())) -> Dict[str, Dict]: """Возвращает текущие сетевые данные в виде словаря. Получает данные о сетевых интерфейсах, разделяет их на активные и неактивные, @@ -150,7 +150,7 @@ def _split_interfaces( return activation_interfaces, deactivation_interfaces @router.post("/update_container_position") -async def update_container_position(data: Dict[str, Union[int, bool]] = Body(...), translations: Translations = Depends(get_translations("api_v1"))): +async def update_container_position(data: Dict[str, Union[int, bool]] = Body(...), translations: Translations = Depends(get_translations())): """Обновляет позицию и состояние контейнера. Принимает данные о новом положении и состоянии контейнера и обновляет их @@ -203,7 +203,7 @@ async def update_container_position(data: Dict[str, Union[int, bool]] = Body(... raise HTTPException(status_code=400, detail=translations.gettext("Не удалось обновить положение контейнера: {error}").format(error=str(e))) @router.get("/get_hostname") -async def get_hostname(translations: Translations = Depends(get_translations("api_v1"))): +async def get_hostname(translations: Translations = Depends(get_translations())): """Возвращает имя хоста системы. Выполняет запрос к сервису для получения имени хоста. diff --git a/SRV/api/v1/settings.py b/SRV/api/v1/settings.py index 8c3e543..bce8ed9 100644 --- a/SRV/api/v1/settings.py +++ b/SRV/api/v1/settings.py @@ -3,10 +3,9 @@ import logging from fastapi import APIRouter, HTTPException, Depends, Response, Request from starlette.responses import FileResponse from services.settings_service import SettingsService -from utils.i18n import get_translations, _ +from utils.i18n import get_translations from babel.support import Translations - logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) @@ -14,7 +13,7 @@ router = APIRouter() settings_service = SettingsService() @router.post("/clear_subnet") -def clear_subnet(translations: Translations = Depends(get_translations("api_v1"))): +def clear_subnet(translations: Translations = Depends(get_translations())): """Очищает данные узлов подсети, сохранённые в devices.json. Удаляет все записи об узлах подсети, оставляя файл пустым. @@ -39,7 +38,7 @@ def clear_subnet(translations: Translations = Depends(get_translations("api_v1") raise HTTPException(status_code=500, detail=translations.gettext("Ошибка очистки: {error}").format(error=str(e))) @router.post("/clear_wifi") -def clear_wifi(translations: Translations = Depends(get_translations("api_v1"))): +def clear_wifi(translations: Translations = Depends(get_translations())): """Очищает данные точек доступа Wi-Fi, сохранённые в wifi.json. Удаляет все записи о точках доступа, оставляя файл пустым. @@ -64,7 +63,7 @@ def clear_wifi(translations: Translations = Depends(get_translations("api_v1"))) raise HTTPException(status_code=500, detail=translations.gettext("Ошибка очистки: {error}").format(error=str(e))) @router.post("/clear_all_data") -def clear_all_data(translations: Translations = Depends(get_translations("api_v1"))): +def clear_all_data(translations: Translations = Depends(get_translations())): """Очищает данные узлов подсети и точек доступа Wi-Fi в обоих файлах. Удаляет все записи из devices.json и wifi.json. @@ -92,7 +91,7 @@ DEVICE_PATH = "storage/devices/devices.json" WIFI_PATH = "storage/wifi/wifi.json" @router.get("/export_devices", response_class=FileResponse) -async def export_devices(translations: Translations = Depends(get_translations("api_v1"))): +async def export_devices(translations: Translations = Depends(get_translations())): """ Экспортирует файл с данными устройств в формате JSON. @@ -116,7 +115,7 @@ async def export_devices(translations: Translations = Depends(get_translations(" ) @router.get("/export_wifi", response_class=FileResponse) -async def export_wifi(translations: Translations = Depends(get_translations("api_v1"))): +async def export_wifi(translations: Translations = Depends(get_translations())): """ Экспортирует файл с данными устройств в формате JSON. @@ -140,7 +139,7 @@ async def export_wifi(translations: Translations = Depends(get_translations("api ) @router.post("/set_language") -def set_language(locale: str, response: Response, translations: Translations = Depends(get_translations("api_v1"))): +def set_language(locale: str, response: Response, translations: Translations = Depends(get_translations())): """ Устанавливает куку locale для смены языка пользователя. diff --git a/SRV/api/v1/subnet.py b/SRV/api/v1/subnet.py index 1588537..309c99d 100644 --- a/SRV/api/v1/subnet.py +++ b/SRV/api/v1/subnet.py @@ -16,7 +16,7 @@ logger = logging.getLogger(__name__) @router.post("/devices", response_model=SubnetScanResult) -def scan_subnet(request: SubnetScanRequest = Body(...), translations: Translations = Depends(get_translations("api_v1"))): +def scan_subnet(request: SubnetScanRequest = Body(...), translations: Translations = Depends(get_translations())): """Сканирует локальную подсеть и возвращает данные об устройствах. Выполняет сканирование указанной подсети для обнаружения активных устройств. @@ -45,7 +45,7 @@ def scan_subnet(request: SubnetScanRequest = Body(...), translations: Translatio raise HTTPException(status_code=500, detail=translations.gettext("Ошибка сканирования: {error}").format(error=str(e))) @router.get("/wifi", response_model=WifiScanResult) -def scan_wifi(timeout: int = 30, translations: Translations = Depends(get_translations("api_v1"))): +def scan_wifi(timeout: int = 30, translations: Translations = Depends(get_translations())): """Сканирует Wi-Fi точки доступа и возвращает данные о них. Выполняет сканирование доступных Wi-Fi сетей с указанным таймаутом. @@ -68,7 +68,7 @@ def scan_wifi(timeout: int = 30, translations: Translations = Depends(get_transl raise HTTPException(status_code=500, detail=translations.gettext("Ошибка сканирования Wi-Fi: {error}").format(error=str(e))) @router.post("/devices/{mac}/note") -def add_note(mac: str, request: NoteRequest, translations: Translations = Depends(get_translations("api_v1"))): +def add_note(mac: str, request: NoteRequest, translations: Translations = Depends(get_translations())): """Добавляет заметку для устройства по MAC-адресу. Привязывает заметку к устройству, идентифицируемому по MAC-адресу. @@ -100,7 +100,7 @@ def add_note(mac: str, request: NoteRequest, translations: Translations = Depend raise HTTPException(status_code=500, detail=translations.gettext("Ошибка добавления заметки: {error}").format(error=str(e))) @router.put("/devices/{mac}/note") -def update_note(mac: str, request: NoteRequest, translations: Translations = Depends(get_translations("api_v1"))): +def update_note(mac: str, request: NoteRequest, translations: Translations = Depends(get_translations())): """Обновляет заметку для устройства по MAC-адресу. Изменяет существующую заметку, привязанную к устройству. @@ -132,7 +132,7 @@ def update_note(mac: str, request: NoteRequest, translations: Translations = Dep raise HTTPException(status_code=500, detail=translations.gettext("Ошибка обновления заметки: {error}").format(error=str(e))) @router.delete("/devices/{mac}/note") -def delete_note(mac: str, translations: Translations = Depends(get_translations("api_v1"))): +def delete_note(mac: str, translations: Translations = Depends(get_translations())): """Удаляет заметку для устройства по MAC-адресу. Удаляет привязанную заметку для указанного устройства. @@ -163,7 +163,7 @@ def delete_note(mac: str, translations: Translations = Depends(get_translations( raise HTTPException(status_code=500, detail=translations.gettext("Ошибка удаления заметки: {error}").format(error=str(e))) @router.post("/wifi/{ssid}/note") -def add_wifi_note(ssid: str, request: NoteRequest, translations: Translations = Depends(get_translations("api_v1"))): +def add_wifi_note(ssid: str, request: NoteRequest, translations: Translations = Depends(get_translations())): """Добавляет заметку для сети Wi-Fi по SSID. Привязывает заметку к Wi-Fi сети, идентифицируемой по SSID. @@ -195,7 +195,7 @@ def add_wifi_note(ssid: str, request: NoteRequest, translations: Translations = raise HTTPException(status_code=500, detail=translations.gettext("Ошибка добавления заметки: {error}").format(error=str(e))) @router.put("/wifi/{ssid}/note") -def update_wifi_note(ssid: str, request: NoteRequest, translations: Translations = Depends(get_translations("api_v1"))): +def update_wifi_note(ssid: str, request: NoteRequest, translations: Translations = Depends(get_translations())): """Обновляет заметку для сети Wi-Fi по SSID. Изменяет существующую заметку, привязанную к Wi-Fi сети. @@ -227,7 +227,7 @@ def update_wifi_note(ssid: str, request: NoteRequest, translations: Translations raise HTTPException(status_code=500, detail=translations.gettext("Ошибка обновления заметки: {error}").format(error=str(e))) @router.delete("/wifi/{ssid}/note") -def delete_wifi_note(ssid: str, translations: Translations = Depends(get_translations("api_v1"))): +def delete_wifi_note(ssid: str, translations: Translations = Depends(get_translations())): """Удаляет заметку для сети Wi-Fi по SSID. Удаляет привязанную заметку для указанной Wi-Fi сети. @@ -258,7 +258,7 @@ def delete_wifi_note(ssid: str, translations: Translations = Depends(get_transla raise HTTPException(status_code=500, detail=translations.gettext("Ошибка удаления заметки: {error}").format(error=str(e))) @router.post("/wifi/connect") -def connect_to_wifi(request: WifiConnectRequest, translations: Translations = Depends(get_translations("api_v1"))): +def connect_to_wifi(request: WifiConnectRequest, translations: Translations = Depends(get_translations())): """Подключается к Wi-Fi сети по SSID и паролю. Выполняет подключение к указанной Wi-Fi сети с использованием предоставленных @@ -286,7 +286,7 @@ def connect_to_wifi(request: WifiConnectRequest, translations: Translations = De raise HTTPException(status_code=500, detail=translations.gettext("Ошибка подключения к Wi-Fi: {error}").format(error=str(e))) @router.post("/wifi/disconnect") -def disconnect_from_wifi(request: WifiDisconnectRequest, translations: Translations = Depends(get_translations("api_v1"))): +def disconnect_from_wifi(request: WifiDisconnectRequest, translations: Translations = Depends(get_translations())): """Отключается от Wi-Fi сети по указанному SSID. Выполняет отключение от указанной Wi-Fi сети. @@ -313,7 +313,7 @@ def disconnect_from_wifi(request: WifiDisconnectRequest, translations: Translati raise HTTPException(status_code=500, detail=translations.gettext("Ошибка отключения от Wi-Fi: {error}").format(error=str(e))) @router.get("/wifi/status") -def get_wifi_status(translations: Translations = Depends(get_translations("api_v1"))): +def get_wifi_status(translations: Translations = Depends(get_translations())): """Проверяет статус текущего подключения к Wi-Fi. Возвращает информацию о текущем состоянии подключения и SSID, если подключение активно. diff --git a/SRV/api/v1/websocket.py b/SRV/api/v1/websocket.py index 7dab510..0ed2809 100644 --- a/SRV/api/v1/websocket.py +++ b/SRV/api/v1/websocket.py @@ -78,7 +78,7 @@ class WebSocketManager: manager = WebSocketManager() @router.websocket("/api/v1") -async def websocket_endpoint(websocket: WebSocket, translations: Translations = Depends(get_translations("api_v1"))): +async def websocket_endpoint(websocket: WebSocket, translations: Translations = Depends(get_translations())): """Обработчик WebSocket-соединения. Управляет соединением клиента, принимает данные для обновления позиций @@ -126,7 +126,7 @@ async def startup_event(): """ asyncio.create_task(broadcast_data()) -async def broadcast_data(translations: Translations = Depends(get_translations("api_v1"))): +async def broadcast_data(translations: Translations = Depends(get_translations())): """Таск для периодической трансляции сетевых данных. Выполняет сканирование сети и отправляет данные всем подключённым клиентам diff --git a/SRV/babel.cfg b/SRV/babel.cfg index 2a01571..6a7d140 100644 --- a/SRV/babel.cfg +++ b/SRV/babel.cfg @@ -1,39 +1,3 @@ -[python: api/v1/**.py] +[python: **.py] encoding = utf-8 extract_messages = _ -domain = api_v1 - -[python: services/**.py] -encoding = utf-8 -extract_messages = _ -domain = services - -[python: config/**.py] -encoding = utf-8 -extract_messages = _ -domain = config - -[python: core/**.py] -encoding = utf-8 -extract_messages = _ -domain = core - -[python: models/**.py] -encoding = utf-8 -extract_messages = _ -domain = models - -[python: storage/**.py] -encoding = utf-8 -extract_messages = _ -domain = storage - -[python: utils/**.py] -encoding = utf-8 -extract_messages = _ -domain = utils - -[python: *.py] -encoding = utf-8 -extract_messages = _ -domain = main \ No newline at end of file diff --git a/SRV/locales/en/LC_MESSAGES/api_v1.mo b/SRV/locales/en/LC_MESSAGES/api_v1.mo deleted file mode 100644 index 35d41c91363de2356a929c7de812da2004903f95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5868 zcmb_gTWlQF89r4hfo(wL(hCK|0Rl7t^Wwz1Ju66*b~4L!0!P+1g3#opkxS`1!jR~fJcG910Diy z+rrq>KnwU3unr{siCY-^4)7>&Kkz(oAMm%~^Q|zti1jG&yTD(D_!rDdWlArml@DW%E@v{)O-p1H7c%A|t z2VMYv6Zp4qecSDUA9EqT4_rnrJ_RBK?BrL1_`ASIuzn7>3;1rh{sfrB`X4~@=g~WY zcs>Pu6zdm&JAoen?+1PYB!B)2{08u$I~l`QHUj)QFbgF40?2_EfZKs9;rde`)yuzu z_X6*^i?IiQ!@wQDqd?k!0eA@bb0GQq=kWP|fDd7P@7;{ym+iv`@#lbKp9dsAUjse} zTm{|(`~wiI?C(I5zvZjQEpQu<{4N5C?-d{it^i5T?|~ZdpFoP!BVS_-p=HN_dw>E+ zeD4Au2L1-fW`ynvm*pMX7I|M7OkQZ5l~*`@G?wHQd8zReEahcck=NukwP>8f?se?H zj7N1Y>y01DYU9Ts#y*ojjgu~^-7B(2BI=E^jitsp@K*RUrZ#T!&4@ZDSLIb%mzOvM z)aB*S#Omh>c?0%*th}i~@AgI8@x}Aol|Awz_AWsxOvfHfyxLf9`VPToc`lb3H+(-FavJwSM z)+D8%S%(P83RT;63TNX*Syj0TQ??iuu<6*xk*a{IN@+(d!@7Kn%DU+fmEw6$*+*9D z5LrcaQP3;M7dEKEt~Sm`4O1(tch^3@s zG;B~#+c4=rA#OxsuR+mWR*>m)YKE!Q$F1939dw971=2iuDVTh+vM~#yn(rQ96bYq| zh6M5&=;)DNw1uymws4Qz`kV;z++?Ss<&<1`JvQGPFL9c%sL!y|ka8y9Mp>Q3u%=H; zF?@Tqv4qJlFE*BmR@D{tOK?JjVOvh|$NqcUHYs`;23>?ZY8+Ex zM-#e=U@FU+vA%fAh2~N0DL#w}vf}r7{IO}j$9auf}sq&%NU}*IsQm0m@ z@LGS-H19B2)YuDCSEDX`5rJ95WJXc7x!z7#<(bK5@6*g&LF&-?jUVEBZ$m*sqll_3 z7{YLj1|uE(;nCg0Nf01)DsJI83uD+Xe7%@@>1Yn|R(_~jKc^;AT)r8km2cPczB#Y^ zI4p1tKyKShn+_b+15rDZB2+f@Mr%4?5jJX-$#)R1Rn!W?N;Rs^Ep^+0_+^Sfj|r?= z2>Y$$p3aN+Ah+#$)n1Y6#zwP=rli;p2}s898OG$lH>YX)+?BX zcCcLVv}q^B)7b-=iTwx0#-`G_Tw?Obv^MGr)e_p6?u!&3N)8Qc$=%xEFdrODC3k-- zIh;&_P@59-CTZ$RH=%pJHtp)RXX(D>#rgkUbD_(6R}SbS(;a5q$RzD*slEN%<`l;fV{hVJX!E9djV^JdGIwZQWh zy?q%hco)*u4lg;T?e`(hm1iK4+m0dnP#wlgPV}y$8-_6WtmC$fIc56AwwIe;3)#UeQpqwA|8X6p z2KODVm;IvSn$HR~AY&VrQ{Yb7k3Dfk!SsCLuBQxKjIKIJsAtky6P;#}K2-r+UsokD zEdfD~0_mXh*40Lgz!ko0iuu4XRXE)?i;m~hO|jcvypCDMp4TnYh`C8@a51{@1vkzn zp{jl#y~j(t{$ecNm@P@+`1PHBM(B)MkoL!^F1R(Mhp@t2v(w^Murq7p}+) za~|nxD~ZwOyGEuIhi diff --git a/SRV/locales/en/LC_MESSAGES/api_v1.po b/SRV/locales/en/LC_MESSAGES/api_v1.po deleted file mode 100644 index 96709d0..0000000 --- a/SRV/locales/en/LC_MESSAGES/api_v1.po +++ /dev/null @@ -1,234 +0,0 @@ -# English translations for PROJECT. -# Copyright (C) 2025 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-07-15 11:07+0500\n" -"PO-Revision-Date: 2025-07-15 11:07+0500\n" -"Last-Translator: FULL NAME \n" -"Language: en\n" -"Language-Team: en \n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.17.0\n" - -#: api/v1/auth.py:44 -msgid "Не удалось зарегистрировать пользователя" -msgstr "Failed to register user" - -#: api/v1/auth.py:75 -msgid "Не удалось авторизовать пользователя" -msgstr "Failed to authorize user" - -#: api/v1/auth.py:103 -msgid "bearer" -msgstr "bearer" - -#: api/v1/auth.py:109 -msgid "Не удалось получить данные пользователя" -msgstr "Failed to retrieve user data" - -#: api/v1/auth.py:136 -msgid "Не удалось выйти из системы" -msgstr "Failed to log out" - -#: api/v1/auth.py:162 -msgid "Файл users.json не существует" -msgstr "The users.json file does not exist" - -#: api/v1/auth.py:172 -msgid "Файл users.json существует и содержит пользователей" -msgstr "The users.json file exists and contains users" - -#: api/v1/auth.py:179 -msgid "Файл users.json существует, но не содержит пользователей" -msgstr "The users.json file exists but contains no users" - -#: api/v1/auth.py:183 -msgid "Ошибка при проверке файла" -msgstr "Error while checking the file" - -#: api/v1/ip.py:36 api/v1/ip.py:73 api/v1/ip.py:110 -#, python-brace-format -msgid "Ошибка проверки IP конфигурации: {error}" -msgstr "IP configuration check error: {error}" - -#: api/v1/ip.py:64 api/v1/ip.py:101 -#, python-brace-format -msgid "Настройки сетевого профиля для {connection_id} применены" -msgstr "Network profile settings for {connection_id} applied" - -#: api/v1/network.py:62 -#, python-brace-format -msgid "Неверное имя контейнера: {container_name}" -msgstr "Invalid container name: {container_name}" - -#: api/v1/network.py:129 -msgid "Не удалось получить сетевые данные" -msgstr "Failed to retrieve network data" - -#: api/v1/network.py:182 -#, python-brace-format -msgid "" -"Отсутствуют обязательные поля: container_id, container_x, container_y, " -"isOpen" -msgstr "Missing required fields: container_id, container_x, container_y, isOpen" - -#: api/v1/network.py:194 -msgid "Неверный тип данных в запросе" -msgstr "Invalid data type in request" - -#: api/v1/network.py:199 -msgid "Позиция и состояние контейнера обновлены" -msgstr "Container position and state updated" - -#: api/v1/network.py:203 -#, python-brace-format -msgid "Не удалось обновить положение контейнера: {error}" -msgstr "Failed to update container position: {error}" - -#: api/v1/network.py:225 -msgid "Не удалось получить имя хоста" -msgstr "Failed to retrieve hostname" - -#: api/v1/settings.py:34 -msgid "Данные узлов подсети успешно очищены" -msgstr "Subnet node data successfully cleared" - -#: api/v1/settings.py:36 -msgid "Не удалось очистить данные узлов подсети" -msgstr "Failed to clear subnet node data" - -#: api/v1/settings.py:39 api/v1/settings.py:64 api/v1/settings.py:89 -#, python-brace-format -msgid "Ошибка очистки: {error}" -msgstr "Clear error: {error}" - -#: api/v1/settings.py:59 -msgid "Данные точек доступа Wi-Fi успешно очищены" -msgstr "Wi-Fi access point data successfully cleared" - -#: api/v1/settings.py:61 -msgid "Не удалось очистить данные точек доступа Wi-Fi" -msgstr "Failed to clear Wi-Fi access point data" - -#: api/v1/settings.py:84 -msgid "Все сетевые данные успешно очищены" -msgstr "All network data successfully cleared" - -#: api/v1/settings.py:86 -msgid "Не удалось очистить все сетевые данные" -msgstr "Failed to clear all network data" - -#: api/v1/settings.py:110 api/v1/settings.py:134 -msgid "Файл не найден" -msgstr "File not found" - -#: api/v1/settings.py:159 -#, python-brace-format -msgid "Язык '{locale}' не поддерживается." -msgstr "Language '{locale}' is not supported." - -#: api/v1/settings.py:165 -#, python-brace-format -msgid "Язык '{locale}' не поддерживается (нет файлов переводов)." -msgstr "Language '{locale}' is not supported (no translation files)." - -#: api/v1/settings.py:168 -#, python-brace-format -msgid "Язык успешно установлен: {locale}" -msgstr "Language successfully set: {locale}" - -#: api/v1/subnet.py:36 -#, python-brace-format -msgid "Ошибка сканирования: {error}" -msgstr "Scan error: {error}" - -#: api/v1/subnet.py:59 -#, python-brace-format -msgid "Ошибка сканирования Wi-Fi: {error}" -msgstr "Wi-Fi scan error: {error}" - -#: api/v1/subnet.py:87 -#, python-brace-format -msgid "Заметка '{note}' добавлена для устройства {mac}" -msgstr "Note '{note}' added for device {mac}" - -#: api/v1/subnet.py:91 api/v1/subnet.py:186 -#, python-brace-format -msgid "Ошибка добавления заметки: {error}" -msgstr "Error adding note: {error}" - -#: api/v1/subnet.py:119 -#, python-brace-format -msgid "Заметка '{note}' обновлена для устройства {mac}" -msgstr "Note '{note}' updated for device {mac}" - -#: api/v1/subnet.py:123 api/v1/subnet.py:218 -#, python-brace-format -msgid "Ошибка обновления заметки: {error}" -msgstr "Error updating note: {error}" - -#: api/v1/subnet.py:150 -#, python-brace-format -msgid "Заметка удалена для устройства {mac}" -msgstr "Note deleted for device {mac}" - -#: api/v1/subnet.py:154 api/v1/subnet.py:249 -#, python-brace-format -msgid "Ошибка удаления заметки: {error}" -msgstr "Error deleting note: {error}" - -#: api/v1/subnet.py:182 -#, python-brace-format -msgid "Заметка '{note}' добавлена для сети с SSID {ssid}" -msgstr "Note '{note}' added for network with SSID {ssid}" - -#: api/v1/subnet.py:214 -#, python-brace-format -msgid "Заметка '{note}' обновлена для сети с SSID {ssid}" -msgstr "Note '{note}' updated for network with SSID {ssid}" - -#: api/v1/subnet.py:245 -#, python-brace-format -msgid "Заметка удалена для сети с SSID {ssid}" -msgstr "Note deleted for network with SSID {ssid}" - -#: api/v1/subnet.py:273 -#, python-brace-format -msgid "Успешно подключено к {ssid}" -msgstr "Successfully connected to {ssid}" - -#: api/v1/subnet.py:277 -#, python-brace-format -msgid "Ошибка подключения к Wi-Fi: {error}" -msgstr "Wi-Fi connection error: {error}" - -#: api/v1/subnet.py:300 -#, python-brace-format -msgid "Успешно отключено от {ssid}" -msgstr "Successfully disconnected from {ssid}" - -#: api/v1/subnet.py:304 -#, python-brace-format -msgid "Ошибка отключения от Wi-Fi: {error}" -msgstr "Wi-Fi disconnection error: {error}" - -#: api/v1/subnet.py:328 -msgid "connected" -msgstr "connected" - -#: api/v1/subnet.py:332 -#, python-brace-format -msgid "Ошибка проверки статуса Wi-Fi: {error}" -msgstr "Wi-Fi status check error: {error}" - -#: api/v1/websocket.py:145 -msgid "Ошибка: Ключ 'activation' отсутствует в полученных данных сети" -msgstr "Error: The 'activation' key is missing in the received network data" \ No newline at end of file diff --git a/SRV/locales/en/LC_MESSAGES/messages.mo b/SRV/locales/en/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..c6051e9e671432dd71595fabe55e9d08a379d810 GIT binary patch literal 10957 zcmbuFZEzh`8OINbsPzS@ARt-~ptMMDXanUXZLy(AFp#vNDKI*P&i39-y7cDW%iX=D zrF4e2mX~QID2hxSP|*R=QDSIm+R|i3^qa_DWyW!wkH}<9XwBf{86v*H-jtL#4z|}a25Cm@N?jz4=D9n@D6Yj_z*Y( zz7DPg2R~@_dI-FT=a;}<`3`o1OFv}S+YAo!{0w*t_-6F}rVrco9|dpX{hz@b!R2Qv zbrpCoxCVS4ybk;qcsY2*N9^}3cmdCcz>k41fNQ~*LH?+-&cY|)Mc~EY0Z{DtT!eoG zMefB5m0AIA0cG9CL9x#(pxF2PkJ@o}fS>012~fuW6qND*1_!{)&$f2D7rc+>--6xd9tYR(JOhecQTlqI7ZiIw2#VaFfuir*pv+%%u8ogjP`>X4WnWWZ7kJ@$k$*w) z*R$Yd;Hwd;^OgDn&r88h@P04@9*giVpxE`Ck1I6<_JXp`W1x)t1$Z0yHn^Kf0Qq6#vM!g2&O7$NQm#Bqop3qa5 zf#RptAg)v%DErw1YVgP4V(^vd`7IEWs`CgAk-Gwvb#4ZifOmoN{ZNEQK~hb<3W^{8 z2+F?y28w;p*IEn?Uhv2^2X8K-us2L6%m(0%e^yBV2^BMgJQ>UMU|WjM+5bzR?CW=+*!L}vDe4@Ifa%mqP`=*|lA3BK zNa(7ApvZX|6upmwYr)@uqSpl|Ew~1RVw4NY`~Z}FJplHAKLEu~e+OmVGuXTamx7|- zASn6eg0jCyK$$-QN}T)}l)O2OL9))(;3}{W6nXnVvB$HZ>g>2uhmVGjR_|9U;$QlQ zRR2&WoCptB?+cGq_vl?-X}7NK3ttG2=R!an@cyLQ;yPuwtg^*I!OaG4PKA$z z$C)`5PBLLyrpy3`!{gzJ>ciCsWD*~bXe15~_xI>szVGFBN77HC-7yBsplKC;6(#nu z82jLbs6DP(|3L)&1c4I>5fxcVeol1hU2eHtEbnHfe6gR|ML1bKV3lX{$dLyG?~y$q zjkQGV1L0KlAz7(VD0p>Z~ctM>88~ z9D5zN>)9c*-jjVD6xAlN?zAyhv=JzQ4|TgUE`WZTOA+oq#*isd@2IGZfy|T_g{Z|M z^$W`svxc#oS@JkLdC?g1aCM*FTJ(d0Gv=l$Ml(4SOA|!T+a+Zq{52jqg^eVnG?ki- zI0~~UDy|hZjSDD)#1^Zit6DQ1ZQT-sL{cZksWqMz!IG0vJ!@{W205u28tL-ARRug1 ziLDA@b6GZG_L&-O{F&Bne(}^GicFT$x1TMF87JnZK{|Ds8JM&c_eDLBU89A2p_jn% z3T}C`#3Th0KgZKePMeN_APi4R4xErwm@%PgNTPAP1VcEJa=PR;9fvf3mf;AIrqiZT zkzlmnNH?Q~SVek{W9D^rZw=`Xu$DRbrLN19Zq4=;sZLLYPa^I(jpYF`wq!jou)H*S zveG2KJuHimFV%6;nU_N12aOU@LkV4U>BMkeZfWXiNBUvsQtkQcOKw3HN?OM{cABW( zkIkm)#?bB7G)j=LwPM^=O{Ey5MtYL$wi3>3rldXVPK%+$*}`X&#=aBHsH=8iGbz<; zi^@o{MBP%|RS>)DS~WWXw%iP0~w#O7tXYlS$54^A!Fa>9wf-wMPrntYXkq zDWC}=C7s7`BG!3Af zLr=6=1nQrz?l(y)3QFllh>)wL1xU1I9GC^03XlUS1`9IYfo)%i&?02ghFA+B2ll_hb%4rm0s8SBkFtGs?%yxD?QT3 zlev;|mktk6fVjTUi=AxXZFd6B0vx2_RVITR@3^+1&K^Oin*v=lBniHW4oAXN@wey63uJR+R{mju+*6Y4mMTSWN6LGDwJH_ zgXPVtk^^$gifX@z-L3tsQ&8b|jr`OFkyN>)u$nugz0v(u!)TFOTPDnD$?|s1XxrgY z;w^7AXDxK8N&Qb1C(G4?6;^0bC6Xqq~%uJg= zh0ldY@z-&^cvrrdb@Jvm%_OGv_v{WRCKD2T>~~x*5kc%}wyZ$jvO(Fc)Hl(LSC@92 zn*7u>L*L1zraY32LZebIOeYF2Myji!a`8?sZ8QD3%&qtnO6$@?8`j_0yLO|#wRgjC z|N3MdJsWz5hZhX3-{xl8xm zGBBXmbr1IHRW(arw_w02j8>dcmUIiV51EawGbV5Js)2zud9R~b9=&eCP`*-j@|nJ3 zdCc$9g_3#nS9h+|_Se-*3i`s;dikX*7Yz0f_9ix2-mz@KTFz*00j+kHSSxUM1ecfc z9NJdu>{h4jyTR&8Fp{|@87JD0xaCZ5AzRFOh0!j3%@!|MaD&S^4-;X`on88RXN#NH zogK@sW(jkff5YeR;VNH#ntOchsR6SCAxZdx_7OhyyqPY3_ct zv)%FX&X&B}cx~S;WzCf{l-%RvAbqzNY)xMR8wn%DN+GBEMR38%YiMA*Th`{*Jt?@| z`MfT;!QI93Hl1?T zcz-%an6adoDcI`9+H|RP+<=q3(M34Mb#r>8SdIrYY`WzHyMVoLts7J+vFZ8AO;2f* z+)hEAE3!>-uDiqY1FK5g32_9O@qRKPTGzNexl3*(zWL~8vU6_Uotrt*BWtW+;!TQ~ z*=Wuk;j$#B)k>FMpzH=^&xL$MU6b9-KE@kw_AT~+kPYOt-N}2o)Hb7=-sHB(UbDpmWm$Qn;enFl z`|y@foRwnuD}eNcO3LnC6_+H7KL*8ZTr1sD*j6asUBKOOsH9j_QZaq|WiFxyJ^sKnvgcMeyG`CoK^4M{-uupWc`KooGOwKz zeY0eq`pS((wpbYPM(M~*vym0y&As6VPEhe_vzm+;Zu4z}VZlhg@mADw$my=sN>iZ@snV_kY9wy3!h*yhrk`FbqM@TmX5%r5O!Znjn!rb;=ozFbK`w?%|O_8$jk z*;+&UTC4(N+Ezo|BFvf08I}~Lg+md~^4M&#YzT~GR?FC#9U>ek-p^BBba5nAFCzx_ z)kbg3C1!LKLGfXFINbpz)FITD(1NNNMS$4e;xQ6V#Hco-w}_$Q{w, 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2025-07-15 15:01+0500\n" +"PO-Revision-Date: 2025-07-15 15:02+0500\n" +"Last-Translator: FULL NAME \n" +"Language: en\n" +"Language-Team: en \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: api/v1/auth.py:44 +msgid "Не удалось зарегистрировать пользователя" +msgstr "Failed to register user" + +#: api/v1/auth.py:75 +msgid "Не удалось авторизовать пользователя" +msgstr "Failed to authorize user" + +#: api/v1/auth.py:103 +msgid "bearer" +msgstr "bearer" + +#: api/v1/auth.py:109 +msgid "Не удалось получить данные пользователя" +msgstr "Failed to retrieve user data" + +#: api/v1/auth.py:136 +msgid "Не удалось выйти из системы" +msgstr "Failed to log out" + +#: api/v1/auth.py:162 +msgid "Файл users.json не существует" +msgstr "The users.json file does not exist" + +#: api/v1/auth.py:172 +msgid "Файл users.json существует и содержит пользователей" +msgstr "The users.json file exists and contains users" + +#: api/v1/auth.py:179 +msgid "Файл users.json существует, но не содержит пользователей" +msgstr "The users.json file exists but does not contain users" + +#: api/v1/auth.py:183 +msgid "Ошибка при проверке файла" +msgstr "Error checking the file" + +#: api/v1/ip.py:36 api/v1/ip.py:73 api/v1/ip.py:110 +#, python-brace-format +msgid "Ошибка проверки IP конфигурации: {error}" +msgstr "IP configuration check error: {error}" + +#: api/v1/ip.py:64 api/v1/ip.py:101 +#, python-brace-format +msgid "Настройки сетевого профиля для {connection_id} применены" +msgstr "Network profile settings for {connection_id} applied" + +#: api/v1/network.py:62 +#, python-brace-format +msgid "Неверное имя контейнера: {container_name}" +msgstr "Invalid container name: {container_name}" + +#: api/v1/network.py:129 +msgid "Не удалось получить сетевые данные" +msgstr "Failed to retrieve network data" + +#: api/v1/network.py:182 +msgid "" +"Отсутствуют обязательные поля: container_id, container_x, container_y, " +"isOpen" +msgstr "Missing required fields: container_id, container_x, container_y, isOpen" + +#: api/v1/network.py:194 +msgid "Неверный тип данных в запросе" +msgstr "Invalid data type in request" + +#: api/v1/network.py:199 +msgid "Позиция и состояние контейнера обновлены" +msgstr "Container position and state updated" + +#: api/v1/network.py:203 +#, python-brace-format +msgid "Не удалось обновить положение контейнера: {error}" +msgstr "Failed to update container position: {error}" + +#: api/v1/network.py:225 +msgid "Не удалось получить имя хоста" +msgstr "Failed to retrieve hostname" + +#: api/v1/settings.py:33 +msgid "Данные узлов подсети успешно очищены" +msgstr "Subnet node data successfully cleared" + +#: api/v1/settings.py:35 +msgid "Не удалось очистить данные узлов подсети" +msgstr "Failed to clear subnet node data" + +#: api/v1/settings.py:38 api/v1/settings.py:63 api/v1/settings.py:88 +#, python-brace-format +msgid "Ошибка очистки: {error}" +msgstr "Clear error: {error}" + +#: api/v1/settings.py:58 +msgid "Данные точек доступа Wi-Fi успешно очищены" +msgstr "Wi-Fi access point data successfully cleared" + +#: api/v1/settings.py:60 +msgid "Не удалось очистить данные точек доступа Wi-Fi" +msgstr "Failed to clear Wi-Fi access point data" + +#: api/v1/settings.py:83 +msgid "Все сетевые данные успешно очищены" +msgstr "All network data successfully cleared" + +#: api/v1/settings.py:85 +msgid "Не удалось очистить все сетевые данные" +msgstr "Failed to clear all network data" + +#: api/v1/settings.py:109 api/v1/settings.py:133 +msgid "Файл не найден" +msgstr "File not found" + +#: api/v1/settings.py:158 +#, python-brace-format +msgid "Язык '{locale}' не поддерживается." +msgstr "Language '{locale}' is not supported." + +#: api/v1/settings.py:164 +#, python-brace-format +msgid "Язык '{locale}' не поддерживается (нет файлов переводов)." +msgstr "Language '{locale}' is not supported (no translation files)." + +#: api/v1/settings.py:167 +#, python-brace-format +msgid "Язык успешно установлен: {locale}" +msgstr "Language successfully set: {locale}" + +#: api/v1/subnet.py:45 +#, python-brace-format +msgid "Ошибка сканирования: {error}" +msgstr "Scan error: {error}" + +#: api/v1/subnet.py:68 +#, python-brace-format +msgid "Ошибка сканирования Wi-Fi: {error}" +msgstr "Wi-Fi scan error: {error}" + +#: api/v1/subnet.py:96 +#, python-brace-format +msgid "Заметка '{note}' добавлена для устройства {mac}" +msgstr "Note '{note}' added for device {mac}" + +#: api/v1/subnet.py:100 api/v1/subnet.py:195 +#, python-brace-format +msgid "Ошибка добавления заметки: {error}" +msgstr "Error adding note: {error}" + +#: api/v1/subnet.py:128 +#, python-brace-format +msgid "Заметка '{note}' обновлена для устройства {mac}" +msgstr "Note '{note}' updated for device {mac}" + +#: api/v1/subnet.py:132 api/v1/subnet.py:227 +#, python-brace-format +msgid "Ошибка обновления заметки: {error}" +msgstr "Error updating note: {error}" + +#: api/v1/subnet.py:159 +#, python-brace-format +msgid "Заметка удалена для устройства {mac}" +msgstr "Note deleted for device {mac}" + +#: api/v1/subnet.py:163 api/v1/subnet.py:258 +#, python-brace-format +msgid "Ошибка удаления заметки: {error}" +msgstr "Error deleting note: {error}" + +#: api/v1/subnet.py:191 +#, python-brace-format +msgid "Заметка '{note}' добавлена для сети с SSID {ssid}" +msgstr "Note '{note}' added for network with SSID {ssid}" + +#: api/v1/subnet.py:223 +#, python-brace-format +msgid "Заметка '{note}' обновлена для сети с SSID {ssid}" +msgstr "Note '{note}' updated for network with SSID {ssid}" + +#: api/v1/subnet.py:254 +#, python-brace-format +msgid "Заметка удалена для сети с SSID {ssid}" +msgstr "Note deleted for network with SSID {ssid}" + +#: api/v1/subnet.py:282 +#, python-brace-format +msgid "Успешно подключено к {ssid}" +msgstr "Successfully connected to {ssid}" + +#: api/v1/subnet.py:286 +#, python-brace-format +msgid "Ошибка подключения к Wi-Fi: {error}" +msgstr "Wi-Fi connection error: {error}" + +#: api/v1/subnet.py:309 +#, python-brace-format +msgid "Успешно отключено от {ssid}" +msgstr "Successfully disconnected from {ssid}" + +#: api/v1/subnet.py:313 +#, python-brace-format +msgid "Ошибка отключения от Wi-Fi: {error}" +msgstr "Wi-Fi disconnection error: {error}" + +#: api/v1/subnet.py:337 +msgid "connected" +msgstr "connected" + +#: api/v1/subnet.py:341 +#, python-brace-format +msgid "Ошибка проверки статуса Wi-Fi: {error}" +msgstr "Wi-Fi status check error: {error}" + +#: api/v1/websocket.py:145 +msgid "Ошибка: Ключ 'activation' отсутствует в полученных данных сети" +msgstr "Error: The 'activation' key is missing in the received network data" + +#: services/arp_service.py:102 +msgid "Доступные устройства в сети:" +msgstr "Available devices in the network:" + +#: services/arp_service.py:103 +msgid "IP" +msgstr "IP" + +#: services/arp_service.py:103 +msgid "MAC" +msgstr "MAC" + +#: services/auth_service.py:72 +msgid "Ошибка регистрации" +msgstr "Registration error" + +#: services/auth_service.py:80 services/auth_service.py:84 +msgid "Неверный логин или пароль" +msgstr "Invalid username or password" + +#: services/auth_service.py:100 +msgid "Ошибка авторизации" +msgstr "Authorization error" + +#: services/auth_service.py:108 +msgid "Неверный токен" +msgstr "Invalid token" + +#: services/auth_service.py:113 services/auth_service.py:128 +msgid "Пользователь не найден" +msgstr "User not found" + +#: services/auth_service.py:122 +msgid "Сессия недействительна" +msgstr "Session is invalid" + +#: services/auth_service.py:144 +msgid "Успешный выход из системы" +msgstr "Successfully logged out" + +#: services/auth_service.py:148 +msgid "Ошибка при выходе из системы" +msgstr "Error during logout" + +#: services/connect_service.py:70 services/connect_service.py:117 +#: services/connect_service.py:154 services/wifi_service.py:227 +msgid "Wi-Fi-интерфейс не доступен" +msgstr "Wi-Fi interface is not available" + +#: services/connect_service.py:74 +#, python-brace-format +msgid "Сеть с SSID {ssid} не найдена в списке доступных сетей" +msgstr "Network with SSID {ssid} not found in the list of available networks" + +#: services/connect_service.py:81 services/connect_service.py:92 +#, python-brace-format +msgid "Ошибка подключения к {ssid}: Неверный пароль" +msgstr "Connection error to {ssid}: Invalid password" + +#: services/connect_service.py:83 services/connect_service.py:94 +#, python-brace-format +msgid "" +"Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно " +"указана" +msgstr "Connection error to {ssid}: Network with SSID {ssid} is unavailable or incorrectly specified" + +#: services/connect_service.py:85 services/connect_service.py:95 +#, python-brace-format +msgid "Ошибка подключения к {ssid}: {error}" +msgstr "Connection error to {ssid}: {error}" + +#: services/connect_service.py:98 +#, python-brace-format +msgid "Ошибка подключения к {ssid}: Неизвестная ошибка - {error}" +msgstr "Connection error to {ssid}: Unknown error - {error}" + +#: services/connect_service.py:122 +#, python-brace-format +msgid "Нет активного подключения для SSID {ssid}" +msgstr "No active connection for SSID {ssid}" + +#: services/connect_service.py:133 +#, python-brace-format +msgid "Активное подключение с SSID {ssid} не найдено" +msgstr "Active connection with SSID {ssid} not found" + +#: services/connect_service.py:136 services/connect_service.py:139 +#, python-brace-format +msgid "Ошибка отключения от {ssid}: {error}" +msgstr "Disconnection error from {ssid}: {error}" + +#: services/connect_service.py:160 +msgid "Не подключено к Wi-Fi" +msgstr "Not connected to Wi-Fi" + +#: services/connect_service.py:163 +#, python-brace-format +msgid "Ошибка проверки статуса: {error}" +msgstr "Status check error: {error}" + +#: services/ip_service.py:69 +#, python-brace-format +msgid "IP-адрес {ip} уже занят." +msgstr "IP address {ip} is already in use." + +#: services/ip_service.py:73 +msgid "Настройки сетевого профиля доступны для использования." +msgstr "Network profile settings are available for use." + +#: services/ip_service.py:102 +#, python-brace-format +msgid "Подключение {connection_id} не найдено" +msgstr "Connection {connection_id} not found" + +#: services/ip_service.py:130 +#, python-brace-format +msgid "Устройство для интерфейса {interface} не найдено" +msgstr "Device for interface {interface} not found" + +#: services/network_service.py:232 +#, python-brace-format +msgid "Не удалось выполнить команду hostname: {error}" +msgstr "Failed to execute hostname command: {error}" + +#: services/network_service.py:234 +#, python-brace-format +msgid "Ошибка обработки вывода hostname: {error}" +msgstr "Error processing hostname output: {error}" + +#: services/settings_service.py:37 +#, python-brace-format +msgid "Ошибка очистки узлов подсети: {error}" +msgstr "Error clearing subnet nodes: {error}" + +#: services/settings_service.py:58 +#, python-brace-format +msgid "Ошибка очистки точек доступа Wi-Fi: {error}" +msgstr "Error clearing Wi-Fi access points: {error}" + +#: services/settings_service.py:84 +#, python-brace-format +msgid "Ошибка очистки всех сетевых данных: {error}" +msgstr "Error clearing all network data: {error}" + +#: services/subnet_service.py:75 services/wifi_service.py:115 +msgid "Неизвестный" +msgstr "Unknown" + +#: services/subnet_service.py:179 +#, python-brace-format +msgid "Ошибка при сохранении устройств: {error}" +msgstr "Error saving devices: {error}" + +#: services/subnet_service.py:374 services/subnet_service.py:391 +#: services/subnet_service.py:408 +#, python-brace-format +msgid "Устройство с MAC {mac} не найдено" +msgstr "Device with MAC {mac} not found" + +#: services/subnet_service.py:377 +#, python-brace-format +msgid "Заметка для устройства с MAC {mac} уже существует" +msgstr "Note for device with MAC {mac} already exists" + +#: services/subnet_service.py:384 services/subnet_service.py:401 +#: services/subnet_service.py:418 services/wifi_service.py:319 +#: services/wifi_service.py:337 services/wifi_service.py:355 +#, python-brace-format +msgid "Внутренняя ошибка сервера: {error}" +msgstr "Internal server error: {error}" + +#: services/subnet_service.py:394 services/subnet_service.py:411 +#, python-brace-format +msgid "Заметка для устройства с MAC {mac} не существует" +msgstr "Note for device with MAC {mac} does not exist" + +#: services/wifi_service.py:61 +#, python-brace-format +msgid "Ошибка при сохранении заметок: {error}" +msgstr "Error saving notes: {error}" + +#: services/wifi_service.py:81 +msgid "Не найдено сетевых интерфейсов" +msgstr "No network interfaces found" + +#: services/wifi_service.py:102 +msgid "Не найден активный Wi-Fi-интерфейс" +msgstr "No active Wi-Fi interface found" + +#: services/wifi_service.py:122 +msgid "WPA3" +msgstr "WPA3" + +#: services/wifi_service.py:124 +msgid "WPA2" +msgstr "WPA2" + +#: services/wifi_service.py:126 +msgid "WPA" +msgstr "WPA" + +#: services/wifi_service.py:128 +msgid "WEP" +msgstr "WEP" + +#: services/wifi_service.py:129 +msgid "Открытая" +msgstr "Open" + +#: services/wifi_service.py:152 +msgid "2.4 ГГц" +msgstr "2.4 GHz" + +#: services/wifi_service.py:154 +msgid "5 ГГц" +msgstr "5 GHz" + +#: services/wifi_service.py:165 +msgid "Интерфейс не определён" +msgstr "Interface not defined" + +#: services/wifi_service.py:215 +msgid "Таймаут при выполнении iw scan" +msgstr "Timeout during iw scan" + +#: services/wifi_service.py:312 +#, python-brace-format +msgid "Заметка для сети с SSID {ssid} уже существует" +msgstr "Note for network with SSID {ssid} already exists" + +#: services/wifi_service.py:327 services/wifi_service.py:345 +#, python-brace-format +msgid "Сеть с SSID {ssid} не найдена" +msgstr "Network with SSID {ssid} not found" + +#: services/wifi_service.py:330 services/wifi_service.py:348 +#, python-brace-format +msgid "Заметка для сети с SSID {ssid} не существует" +msgstr "Note for network with SSID {ssid} does not exist" \ No newline at end of file diff --git a/SRV/locales/en/LC_MESSAGES/services.mo b/SRV/locales/en/LC_MESSAGES/services.mo deleted file mode 100644 index 876318461acb39111bcf66d3c32cc1f4a186210e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5499 zcmb`KX>1%<9l)nFTy8j8T8hN=%B3ExW4mz@Hcb@QcEScbacw6Nhd`6vXJ?xAj5Ras z99E>nP8v{3LtCydEtfzl2-ujo@eywjLX?j)Uy%5Mgpd#jAr1+I#20@5H?yAI_0dEk ziv9DIB;ZCPzRPQbUo)9?-O0{kev2>EaQ zFy&8D&cQ9be>LSYZ0Gss@F4sf`~=K1X*&$z0r(0mz<uz0oUL!RtZi@KnC;Tt`Fx<-K_QDRh1A0*G_yO#L ze^1A|-sreB zl#38oTPrDl0Ts`$!H>f~!4JR(aMnX`JM4f*Q(lHSo)=R75kA24{r4vJJ_zVue+(t>ehb-x^=~Nq*m9p`eFScWVqYhG7u*3Kfd}EkFiiOp6nVdbvhJTy z{QMw`B=2^^$Klhk555dhW&Ht)UH^jbhxgu}Ja2=Dus#Jv-sj=l;cWW;1t@;~KHLR= z4P{?#w;qZi|6tnT_Bg(0gjl#8m-_4s@=A74<@&g3~2 z&ql9C^D4T*z)E~Io@uuRdwQ*7{X^EVp&t3^l3$No$DG`LCl@U+Ylh|L_dWld6@9hAs+IVP z=$kcWp2rxB$HF<*M{|h??9E%zH_(0)Q8Pw1W-O!6s9=0ugAp_ve~BeVAUze?QH%5QFv8nx(_37y1qIeuP}S)yNkaCCe6!|CVy}Bu05d}@|z8&SufeWs6-mx!!WUK8NVX3YTS%}jNYdC|T`C0fQ6SdFjBi>!Fr-<;Tim7=~HKLZz9 z=G3BVj901mn#hukiN7RSaN>HdX;P6aYUn&k2boFRPJ>5VmR*+o$}~!nURsj}5=QAu zB*pDXGTW6NxYXP@t4V&`rjS{@CGnn1Ls4&08!g`;UQ4gzgx6grW!98c%{kZP(c2T& zl!lTq&FwyyHTXLe{vByDRMtAD4tbQFVDyaD0$Ry-Cp}=6?5j$iN@HosQfXO9X2zFH zX3~DxizG~vM)T3l_{zGAm{N-`nH(2|ayTMM)Fej{Wx8Qpjn;JqtUc{E6C%x1PSB(u zlcZHS&=K5tq&9k-x%1L)(q6t=y5Cyc8R*2*MbCA0F?2ll3mcyGvb3RFu1vzTN#L8LN=R>iZhCRJB_5DA+FZ@1AxP}yDuHEI z^j*TaC>G@%9Fc^1AxhE^*L2lH`tNy{B!oa?szP{o9k&(8c!=t%gU)z#1xjsAO z?Ca|2>dtlS%yo9F&dz+t&c`~sJ35${8`e{fXxen%fE|RnQQvlhvK@MUUhO|JFrW_g z4EC!hnpE#?8?fE+iam}>?XEuLMzuX5Z`2b51N+KOyXTMZZ5t|Ae7l_6@A(r!Ub&Oz zG1$|!TP1()dDvAC?NObN>~0$@4EAR}>1^+4>-C6$i&bYP(G}{`;kL=L?YO&D@r3OM zI^0tU$8x)}d1C#T_H+Gi(JMLbcwX%~?u2azw5xqwgfq|N)syydT~=M~ojXxsz6TC` z@+=<%^4oj~D7#ehbr2+<0ZyRoGL9~tQI4xBf!_2pfH`T>C>FY2sO%}*Dci@(+UlXe zr?kpyU7d2m6HS+VSuo~R+>%ugIj&t+f%d1gugtwYYf(LQsj5V9i#kxAtHKjnxjH=M z`6u(%AurU(^6PKbDl2&`6OH<`6NI<1pza4VKgbp&CL{{7JN8E6*Pq=Y+iYKI&lp(J zV~(p!)}dr`YSQ<{oU+C@VMv&XkgqdGn_Zhg9rBc&INjW48-kNKneo(L*-(%M0RPoP zrAsRG(hKT-qM1DF)4Eu}$Mwr6vnM8Ox0D5`;7-|PrzA;3C?~Wc8k2Sq5FiO~G8lR% zwQC)5PrBYI7oXNGZb%b}V&kpx@FXjGD&Yywcg~s)kfevzFCTZ}9TFnIF_~>%C7i5; znQ47a(4fF1mm2fEi8VK#L}an7ZC?c1x5?dxF4!4V9iJJ5%3+liA_1Q8v zs2nE@M7pFKCQ<$AnV9TOVvu|bXM#4HQ=kd>KD{>c`DWA82&B5Qi_~Uo>iJl4SF2oN zY+^, 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-07-15 11:07+0500\n" -"PO-Revision-Date: 2025-07-15 11:07+0500\n" -"Last-Translator: FULL NAME \n" -"Language: en\n" -"Language-Team: en \n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.17.0\n" - -#: services/arp_service.py:102 -msgid "Доступные устройства в сети:" -msgstr "Available devices on the network:" - -#: services/arp_service.py:103 -msgid "IP" -msgstr "IP" - -#: services/arp_service.py:103 -msgid "MAC" -msgstr "MAC" - -#: services/auth_service.py:72 -msgid "Ошибка регистрации" -msgstr "Registration error" - -#: services/auth_service.py:80 services/auth_service.py:84 -msgid "Неверный логин или пароль" -msgstr "Invalid username or password" - -#: services/auth_service.py:100 -msgid "Ошибка авторизации" -msgstr "Authorization error" - -#: services/auth_service.py:108 -msgid "Неверный токен" -msgstr "Invalid token" - -#: services/auth_service.py:113 services/auth_service.py:128 -msgid "Пользователь не найден" -msgstr "User not found" - -#: services/auth_service.py:122 -msgid "Сессия недействительна" -msgstr "Session is invalid" - -#: services/auth_service.py:144 -msgid "Успешный выход из системы" -msgstr "Successfully logged out" - -#: services/auth_service.py:148 -msgid "Ошибка при выходе из системы" -msgstr "Error logging out" - -#: services/connect_service.py:70 services/connect_service.py:117 -#: services/connect_service.py:154 services/wifi_service.py:335 -msgid "Wi-Fi-интерфейс не доступен" -msgstr "Wi-Fi interface is not available" - -#: services/connect_service.py:74 -#, python-brace-format -msgid "Сеть с SSID {ssid} не найдена в списке доступных сетей" -msgstr "Network with SSID {ssid} not found in available networks" - -#: services/connect_service.py:81 services/connect_service.py:92 -#, python-brace-format -msgid "Ошибка подключения к {ssid}: Неверный пароль" -msgstr "Connection error to {ssid}: Incorrect password" - -#: services/connect_service.py:83 services/connect_service.py:94 -#, python-brace-format -msgid "" -"Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно " -"указана" -msgstr "Connection error to {ssid}: Network unavailable or SSID is incorrect" - -#: services/connect_service.py:85 services/connect_service.py:95 -#, python-brace-format -msgid "Ошибка подключения к {ssid}: {error}" -msgstr "Connection error to {ssid}: {error}" - -#: services/connect_service.py:98 -#, python-brace-format -msgid "Ошибка подключения к {ssid}: Неизвестная ошибка - {error}" -msgstr "Connection error to {ssid}: Unknown error - {error}" - -#: services/connect_service.py:122 -#, python-brace-format -msgid "Нет активного подключения для SSID {ssid}" -msgstr "No active connection for SSID {ssid}" - -#: services/connect_service.py:133 -#, python-brace-format -msgid "Активное подключение с SSID {ssid} не найдено" -msgstr "Active connection with SSID {ssid} not found" - -#: services/connect_service.py:136 services/connect_service.py:139 -#, python-brace-format -msgid "Ошибка отключения от {ssid}: {error}" -msgstr "Disconnection error from {ssid}: {error}" - -#: services/connect_service.py:160 -msgid "Не подключено к Wi-Fi" -msgstr "Not connected to Wi-Fi" - -#: services/connect_service.py:163 -#, python-brace-format -msgid "Ошибка проверки статуса: {error}" -msgstr "Status check error: {error}" - -#: services/ip_service.py:69 -#, python-brace-format -msgid "IP-адрес {ip} уже занят." -msgstr "IP address {ip} is already in use." - -#: services/ip_service.py:73 -msgid "Настройки сетевого профиля доступны для использования." -msgstr "Network profile settings are available for use." - -#: services/ip_service.py:101 -#, python-brace-format -msgid "Подключение {connection_id} не найдено" -msgstr "Connection {connection_id} not found" - -#: services/ip_service.py:129 -#, python-brace-format -msgid "Устройство для интерфейса {interface} не найдено" -msgstr "Device for interface {interface} not found" - -#: services/network_service.py:232 -#, python-brace-format -msgid "Не удалось выполнить команду hostname: {error}" -msgstr "Failed to execute hostname command: {error}" - -#: services/network_service.py:234 -#, python-brace-format -msgid "Ошибка обработки вывода hostname: {error}" -msgstr "Error processing hostname output: {error}" - -#: services/settings_service.py:37 -#, python-brace-format -msgid "Ошибка очистки узлов подсети: {error}" -msgstr "Error clearing subnet nodes: {error}" - -#: services/settings_service.py:58 -#, python-brace-format -msgid "Ошибка очистки точек доступа Wi-Fi: {error}" -msgstr "Error clearing Wi-Fi access points: {error}" - -#: services/settings_service.py:84 -#, python-brace-format -msgid "Ошибка очистки всех сетевых данных: {error}" -msgstr "Error clearing all network data: {error}" - -#: services/subnet_service.py:171 services/wifi_service.py:161 -msgid "Неизвестный" -msgstr "Unknown" - -#: services/subnet_service.py:319 -#, python-brace-format -msgid "Ошибка при сохранении устройств: {error}" -msgstr "Error saving devices: {error}" - -#: services/subnet_service.py:524 services/subnet_service.py:558 -#: services/subnet_service.py:591 -#, python-brace-format -msgid "Устройство с MAC {mac} не найдено" -msgstr "Device with MAC {mac} not found" - -#: services/subnet_service.py:528 -#, python-brace-format -msgid "Заметка для устройства с MAC {mac} уже существует" -msgstr "Note for device with MAC {mac} already exists" - -#: services/subnet_service.py:537 services/subnet_service.py:571 -#: services/subnet_service.py:603 services/wifi_service.py:432 -#: services/wifi_service.py:463 services/wifi_service.py:493 -#, python-brace-format -msgid "Внутренняя ошибка сервера: {error}" -msgstr "Internal server error: {error}" - -#: services/subnet_service.py:562 services/subnet_service.py:595 -#, python-brace-format -msgid "Заметка для устройства с MAC {mac} не существует" -msgstr "Note for device with MAC {mac} does not exist" - -#: services/wifi_service.py:78 -#, python-brace-format -msgid "Ошибка при сохранении заметок: {error}" -msgstr "Error saving notes: {error}" - -#: services/wifi_service.py:112 -msgid "Не найдено сетевых интерфейсов" -msgstr "No network interfaces found" - -#: services/wifi_service.py:137 -msgid "Не найден активный Wi-Fi-интерфейс" -msgstr "No active Wi-Fi interface found" - -#: services/wifi_service.py:176 -msgid "WPA3" -msgstr "WPA3" - -#: services/wifi_service.py:178 -msgid "WPA2" -msgstr "WPA2" - -#: services/wifi_service.py:180 -msgid "WPA" -msgstr "WPA" - -#: services/wifi_service.py:182 -msgid "WEP" -msgstr "WEP" - -#: services/wifi_service.py:183 -msgid "Открытая" -msgstr "Open" - -#: services/wifi_service.py:222 -msgid "2.4 ГГц" -msgstr "2.4 GHz" - -#: services/wifi_service.py:224 -msgid "5 ГГц" -msgstr "5 GHz" - -#: services/wifi_service.py:247 -msgid "Интерфейс не определён" -msgstr "Interface not defined" - -#: services/wifi_service.py:312 -msgid "Таймаут при выполнении iw scan" -msgstr "Timeout during iw scan" - -#: services/wifi_service.py:425 -#, python-brace-format -msgid "Заметка для сети с SSID {ssid} уже существует" -msgstr "Note for network with SSID {ssid} already exists" - -#: services/wifi_service.py:453 services/wifi_service.py:483 -#, python-brace-format -msgid "Сеть с SSID {ssid} не найдена" -msgstr "Network with SSID {ssid} not found" - -#: services/wifi_service.py:456 services/wifi_service.py:486 -#, python-brace-format -msgid "Заметка для сети с SSID {ssid} не существует" -msgstr "Note for network with SSID {ssid} does not exist" - - diff --git a/SRV/locales/ru/LC_MESSAGES/api_v1.mo b/SRV/locales/ru/LC_MESSAGES/api_v1.mo deleted file mode 100644 index 9c9e3b1c21fe052f320f4258830dd0a9d74fda84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7283 zcmeI0Uu;uV9LKK;q7{sSe^4|KtH`xqs^(lB9>xd=Y#UtO1)qFSrLxf~{Z%41@oG z5iq>WZhr()`)9BLl$T4=4)7Rw5d0Dhfh#acEf@u(;AwC__yf2btXUyR`@jVF7MKNT ze$OM4^g6g7Yy!`Njo|mr^OaEgDB3OH8{k(Ce+BE%W**1}yFqFXfm^@{uo=7u)`K;V zNzzvEZO{u|2C4ryAj$s=q;DDX;2%zV)#LU$`W%jf zKfxDwK$t+9dcwBcw*8wy zvi~)Z?EecG1=l`h+y4ki_MZj!fy&122SJj55u|nh4a(q~FfQ@9 z!*TEc+CPG1|5skH?f(Ht?Jq#mcR7-P*Z@k0RYg~IDVEeUHD;(i62E8-^C?Cj)(D^C zlh%i5@*6zO=lGmxSfhA*8}HBIQI_$n^&U5^_t6>eC4Q-}>xg(e#WN%#YYkf?)+olN z*@3vcE6x@pYLrj&TRh7r83bhc4M#=uenPH5pINb*4CdW1q$LgY)CQpspTN6GNQLTn z2NiEwW4X0M@G$G_47akOR4U$cO5%%`1WRGXr=ji)eZyR7Hq@uY<`I^KQZVcPpjKr` z3swuxBF`_)KothhGx=4Xb`8ceoLrELLzv_`McZvMr*(##!dH&VhMWM7C$&RxmEFrE zx5JiBTwbNH&aH<+@jN5%!z)>cG!b27^fdg17ZhQ)tn=$lupw2~ zlRBcYoQ`&0Q`kCEC&?QHE-5Ju3zSn-Oy;i;OOaTqP?VQtdwNvVFyZ<_?G_gYC87|4 zR8P*@m5-+vrhyytLFMNY))@5_aYgxJ?+}jJ#sbV$Al|dNpmn0K zF}RtoSOv^Tr|>62)lGGVkDN5L8@OsKv3}z zBePhn*svwrXz9frO%`s? zu?=1-+C9{D=UgFREj9d>>`YXQDLNw-`Tn=ED{~yI$<}boH;g}&wP~zRhlDL z#Pj~4XuVHN1Q`F=b}QSU#EkfH#lU8PV*q?x9NM(uh#YX!nI=MHQ*Pv|0~$`Eni9VT zdrc!&U{;Dzv2Tgf4#ba<1u9fvkwSQ%-|lI@_#ASJj#tGIDNbA?`9sNndY1+n`e*XJ z$L*+L11VKcd5@)%8pHHd)Zttl;d1#+Mv!=!-sL*x77XK1$lRp;qQVx6oSIp%+|8sL z)VCFckrpdojKl|J3dZs|iGR(fQTQ@A2PTp+B_U3NBwv)Q8}1AU|1=o^>m6eoNf6eQ zPdfOEM$l?;L>8Li(I)TG>g@Eiw{^)a zx++paZdD95z-oQ9b+T`p?5|^ff55lxRbQRYhmLZGdOS`u&D$@cqzt)BSF}_@F_LbJD885JKBxG+T5##;8yx7M)(^1 zK6dh?Jp_Gxn=r*H`ouY4fTYvr9XjPww}d~Dtbya zf&<18dAr+>>~KWY<&YLj_QbW`0NZ{zZg_U9*qC8#xMeWFnw7(9g4KHc+b~7-Ugqxl z)q7d#buoXBp`B^52C6Vvlp3+~m)upW_p+s34BcaB^@~ diff --git a/SRV/locales/ru/LC_MESSAGES/api_v1.po b/SRV/locales/ru/LC_MESSAGES/api_v1.po deleted file mode 100644 index 33d92c4..0000000 --- a/SRV/locales/ru/LC_MESSAGES/api_v1.po +++ /dev/null @@ -1,237 +0,0 @@ -# Russian translations for PROJECT. -# Copyright (C) 2025 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-07-15 11:07+0500\n" -"PO-Revision-Date: 2025-07-15 11:07+0500\n" -"Last-Translator: FULL NAME \n" -"Language: ru\n" -"Language-Team: ru \n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.17.0\n" - -#: api/v1/auth.py:44 -msgid "Не удалось зарегистрировать пользователя" -msgstr "Не удалось зарегистрировать пользователя" - -#: api/v1/auth.py:75 -msgid "Не удалось авторизовать пользователя" -msgstr "Не удалось авторизовать пользователя" - -#: api/v1/auth.py:103 -msgid "bearer" -msgstr "bearer" - -#: api/v1/auth.py:109 -msgid "Не удалось получить данные пользователя" -msgstr "Не удалось получить данные пользователя" - -#: api/v1/auth.py:136 -msgid "Не удалось выйти из системы" -msgstr "Не удалось выйти из системы" - -#: api/v1/auth.py:162 -msgid "Файл users.json не существует" -msgstr "Файл users.json не существует" - -#: api/v1/auth.py:172 -msgid "Файл users.json существует и содержит пользователей" -msgstr "Файл users.json существует и содержит пользователей" - -#: api/v1/auth.py:179 -msgid "Файл users.json существует, но не содержит пользователей" -msgstr "Файл users.json существует, но не содержит пользователей" - -#: api/v1/auth.py:183 -msgid "Ошибка при проверке файла" -msgstr "Ошибка при проверке файла" - -#: api/v1/ip.py:36 api/v1/ip.py:73 api/v1/ip.py:110 -#, python-brace-format -msgid "Ошибка проверки IP конфигурации: {error}" -msgstr "Ошибка проверки IP конфигурации: {error}" - -#: api/v1/ip.py:64 api/v1/ip.py:101 -#, python-brace-format -msgid "Настройки сетевого профиля для {connection_id} применены" -msgstr "Настройки сетевого профиля для {connection_id} применены" - -#: api/v1/network.py:62 -#, python-brace-format -msgid "Неверное имя контейнера: {container_name}" -msgstr "Неверное имя контейнера: {container_name}" - -#: api/v1/network.py:129 -msgid "Не удалось получить сетевые данные" -msgstr "Не удалось получить сетевые данные" - -#: api/v1/network.py:182 -msgid "" -"Отсутствуют обязательные поля: container_id, container_x, container_y, " -"isOpen" -msgstr "" -"Отсутствуют обязательные поля: container_id, container_x, container_y, isOpen" - -#: api/v1/network.py:194 -msgid "Неверный тип данных в запросе" -msgstr "Неверный тип данных в запросе" - -#: api/v1/network.py:199 -msgid "Позиция и состояние контейнера обновлены" -msgstr "Позиция и состояние контейнера обновлены" - -#: api/v1/network.py:203 -#, python-brace-format -msgid "Не удалось обновить положение контейнера: {error}" -msgstr "Не удалось обновить положение контейнера: {error}" - -#: api/v1/network.py:225 -msgid "Не удалось получить имя хоста" -msgstr "Не удалось получить имя хоста" - -#: api/v1/settings.py:34 -msgid "Данные узлов подсети успешно очищены" -msgstr "Данные узлов подсети успешно очищены" - -#: api/v1/settings.py:36 -msgid "Не удалось очистить данные узлов подсети" -msgstr "Не удалось очистить данные узлов подсети" - -#: api/v1/settings.py:39 api/v1/settings.py:64 api/v1/settings.py:89 -#, python-brace-format -msgid "Ошибка очистки: {error}" -msgstr "Ошибка очистки: {error}" - -#: api/v1/settings.py:59 -msgid "Данные точек доступа Wi-Fi успешно очищены" -msgstr "Данные точек доступа Wi-Fi успешно очищены" - -#: api/v1/settings.py:61 -msgid "Не удалось очистить данные точек доступа Wi-Fi" -msgstr "Не удалось очистить данные точек доступа Wi-Fi" - -#: api/v1/settings.py:84 -msgid "Все сетевые данные успешно очищены" -msgstr "Все сетевые данные успешно очищены" - -#: api/v1/settings.py:86 -msgid "Не удалось очистить все сетевые данные" -msgstr "Не удалось очистить все сетевые данные" - -#: api/v1/settings.py:110 api/v1/settings.py:134 -msgid "Файл не найден" -msgstr "Файл не найден" - -#: api/v1/settings.py:159 -#, python-brace-format -msgid "Язык '{locale}' не поддерживается." -msgstr "Язык '{locale}' не поддерживается." - -#: api/v1/settings.py:165 -#, python-brace-format -msgid "Язык '{locale}' не поддерживается (нет файлов переводов)." -msgstr "Язык '{locale}' не поддерживается (нет файлов переводов)." - -#: api/v1/settings.py:168 -#, python-brace-format -msgid "Язык успешно установлен: {locale}" -msgstr "Язык успешно установлен: {locale}" - -#: api/v1/subnet.py:36 -#, python-brace-format -msgid "Ошибка сканирования: {error}" -msgstr "Ошибка сканирования: {error}" - -#: api/v1/subnet.py:59 -#, python-brace-format -msgid "Ошибка сканирования Wi-Fi: {error}" -msgstr "Ошибка сканирования Wi-Fi: {error}" - -#: api/v1/subnet.py:87 -#, python-brace-format -msgid "Заметка '{note}' добавлена для устройства {mac}" -msgstr "Заметка '{note}' добавлена для устройства {mac}" - -#: api/v1/subnet.py:91 api/v1/subnet.py:186 -#, python-brace-format -msgid "Ошибка добавления заметки: {error}" -msgstr "Ошибка добавления заметки: {error}" - -#: api/v1/subnet.py:119 -#, python-brace-format -msgid "Заметка '{note}' обновлена для устройства {mac}" -msgstr "Заметка '{note}' обновлена для устройства {mac}" - -#: api/v1/subnet.py:123 api/v1/subnet.py:218 -#, python-brace-format -msgid "Ошибка обновления заметки: {error}" -msgstr "Ошибка обновления заметки: {error}" - -#: api/v1/subnet.py:150 -#, python-brace-format -msgid "Заметка удалена для устройства {mac}" -msgstr "Заметка удалена для устройства {mac}" - -#: api/v1/subnet.py:154 api/v1/subnet.py:249 -#, python-brace-format -msgid "Ошибка удаления заметки: {error}" -msgstr "Ошибка удаления заметки: {error}" - -#: api/v1/subnet.py:182 -#, python-brace-format -msgid "Заметка '{note}' добавлена для сети с SSID {ssid}" -msgstr "Заметка '{note}' добавлена для сети с SSID {ssid}" - -#: api/v1/subnet.py:214 -#, python-brace-format -msgid "Заметка '{note}' обновлена для сети с SSID {ssid}" -msgstr "Заметка '{note}' обновлена для сети с SSID {ssid}" - -#: api/v1/subnet.py:245 -#, python-brace-format -msgid "Заметка удалена для сети с SSID {ssid}" -msgstr "Заметка удалена для сети с SSID {ssid}" - -#: api/v1/subnet.py:273 -#, python-brace-format -msgid "Успешно подключено к {ssid}" -msgstr "Успешно подключено к {ssid}" - -#: api/v1/subnet.py:277 -#, python-brace-format -msgid "Ошибка подключения к Wi-Fi: {error}" -msgstr "Ошибка подключения к Wi-Fi: {error}" - -#: api/v1/subnet.py:300 -#, python-brace-format -msgid "Успешно отключено от {ssid}" -msgstr "Успешно отключено от {ssid}" - -#: api/v1/subnet.py:304 -#, python-brace-format -msgid "Ошибка отключения от Wi-Fi: {error}" -msgstr "Ошибка отключения от Wi-Fi: {error}" - -#: api/v1/subnet.py:328 -msgid "connected" -msgstr "connected" - -#: api/v1/subnet.py:332 -#, python-brace-format -msgid "Ошибка проверки статуса Wi-Fi: {error}" -msgstr "Ошибка проверки статуса Wi-Fi: {error}" - -#: api/v1/websocket.py:145 -msgid "Ошибка: Ключ 'activation' отсутствует в полученных данных сети" -msgstr "Ошибка: Ключ 'activation' отсутствует в полученных данных сети" - - diff --git a/SRV/locales/ru/LC_MESSAGES/messages.mo b/SRV/locales/ru/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..6df629f8fd1e8b6cf0a5a9d28176190976939c54 GIT binary patch literal 13491 zcmeI1e{7vq8OL9cC{$3GqM!y}evZLz>FwBn{utfXjucu}*1@6~EO+hQcCov6-g`U1 zZb{cUVA-JRP{<7EKqZ7ku3fuzEo*~lG%EPs#Khpwm^L(q<0eA(^ufjHchxKsj1-8A-u#@NK;ob0W{`)&VWZORs@8JEL@OBveu;Z+N zyI~7F23Nwr!W-bS3+?wF_(`6Rz>mS>a1DG7^4GcOBE|$>0k4Dyq3rmQ&p$!Qy>gM` zEQed5+Is&&W~=W??X`i8ix(=@=N^jg&MCH;PvnqKAlS) z=QBJnh4t`Z7=b5!z71v9i$CEwU9b(Rov%Ta`x)E_--VmudW_CbX9Vi`HMjysa1yZ> zzHyf0d>t~Coc_zKe+eL?~tkMyazR3 z&i%9<*KXLt^J7r&Ux%{urLMK(eNf|i7;3zJ>px$2xqZ$;`Nu0z<<7gp&d+Yx&GWZm z6Z|K<6|P{AWba*Y6Fds#AMZhpXZ$Lw*HK6n=hsmF@gCGTv|UWaSon^69-WQm2q2&GsO5a6PQvDT>SI+04z8`_xp$8k_ zEp`6*LR5BMfvD#E+2mRL98fRl$m$R{JmHyT1zh%zGL}YCu;*C>ki0Xs+FM4C%NyK=k zRDaZ)%J0n&A#R%Yr<^VESUR3|dQ!<`yeAv)b-XWm6Vx2{MyN2QD$`)poA4&{kLMpz zB|eV1NbK%zZ*>PUnMCg%U-~JuJ4s;`nsU6apu|2JqaVDG+QTmGKZ=0wAuxv!sYp}$ zKiA+6#M9|idJi@A#eSw2-bntSRi4fxM-K?zt3Du&wj}luZ#;iME#(h7-V?G@q3DqL zI_6E3_dn+vW6ev{K1N^?gN*ogF+IRsXBJYld$9w?Hd7iNOg@4^kXw-0;CN5ciI?f( zkTKTcfn+Kh-?P|s0t4o#F=;GIy-|i|c&08tN=IiQk}&Tq?FM$ldKjEAwWd%?bLPKS zD_qi?)jGXJ?0lt*`!r>&`SA%%UD>@e$npJhK9YjEzrNSC z`5hr7@S&o2W(WvB!BP~vPf}!D>Yb3v7|2w4S%F#>sccwPOdG~-rpXC<^0G1HXnvo& zJ(bBOV>{v{D@KqU7E3dUj@c&F5&oGGSwKgML210CHsV;ArKpBhYMLQn8DwtJTIs45 zq@!K8WDsBKhz7N6WF=TW>91$OHk&1jW7Xx7G0ZIgo85WOxZL*;pbOPjA+oWPxOy3)PKJn~Z@; z=$(=eOv)9e&D1nOVs?2=25-7#(B<1?97_Idgky>XR+~aaCZqj^yBRfP73CZ!&FlP7 zSEQAC}I%R1iO8 zl<*Tu!bO8yG+d&0Y01-rr4J7+brYF&JL5?;R7@Q!qEjyaFg6>nC_}bemM9T~trZJd z)p$t+DU)7wcDoYJtESwZcBf=04YuOhh_P=jD0G!KY$}!H+EN)wHc*GE8&=Dv=i$|q zG;7p+J++|jFAF}JdNaFpcZSfSeN zP*D~b%4Wvggq1nH{8O{1=r)n!9&4V$k1E$<^)KIAm}C`$mZU=3#`sZ=C9n_(m96Y! zn&nIsBL%8(Rg;q$S5YKKB7q_(UntiaPg5`jTGbV>iGMB$p!T7YA&n6Fr}F!alS)A? z-3U=|wPArE8afY5gMk9HA;mz_#NW@IPDoMRaksszkT@uDJ%%9ShmB`*6=8gsKr1D% zzuDI=tZqmxR2pNUFu|gzUilc(w8mGtt{o3Q?>((LVU@!4DBYgSH7GZ@-VqicjxXHB zv7T&VS1ik3fQ>Y970Z>ZT$+c-BUy32F*~9#2WM?Mm}+IIzYa)L z^#tZ(?UJLK9gWRmrdT?|b4oNX-)k$AmavjN2Qk>Jy2eAxT6R47@?I=&T9prIn^ic4 zAP==QQ2;MJjo+6^onKiQ83m?ML9@nWxFs>f*qbkQdq?8(tnp}e02(dp@&3YUMhaC6 zj+}VF&Gf{Qj`y6AUvfaCRj#J99>{&mJWjg(nRq%=dw(XCw6nuF z!K{OjfYLz)3-eZ!2**FpkZOd2W}{}A|QHD^l4^UA$Y5U>aEr{X~wH1wF{G9Qq6?# z;-RJ5FAk=>~W0-5nk7 zovS+A+@`XoSJrgIlH2-Y+h{V~Kl2dT5RdK98@H*WqoprVn@Vq6S<}_mpN{oK)~3=s zG7WBWr+LgYFKcw|&*p2BS4Zobo1^YE*SPvwcX@L(>fY+sxfJJlWpjPuQ&aPe`e|y^ zHAU;(-MeiS%G52PPLw+JOB!oB+dJEe){WNI)vRH+7f;f^hjyZMHvVAthMj$E{~Fz% z?Xh$wo^9^WZjIbrEGIi`ji)1R$(~eiBDt->y?IL_TXS2S9V5nOSRQI{SI4%*``r54 z=uI?Hy%$jAAM`W2(i4>Gy})?&USK8`YNz2}e3(edl$lAs`4)IxQK(>Z3uRoTHzkGD zhR8c>Ied~pTsSuTXsZeGR&}hU2~?VXf;SB-1tR*&;Kerv$xvFHmWY z;#RDBFQ7A?;0yBLsbqHv)q4TCX!Txz)w_Bx5OP3kFB6K#7v|`udN06~8TD7Y@Vgvy z?dacfgq$my^NR8VA7kO_y+GwTm~WPu8;qk$HLCXlgN4)E%8Lbih*P>X37vwbP~jS* zdM^-onGj;UnWW4d1M4uoc%Q@FW^k?Qy+GN@2mF$ J|EGI_{{XK~q>lgq literal 0 HcmV?d00001 diff --git a/SRV/locales/ru/LC_MESSAGES/messages.po b/SRV/locales/ru/LC_MESSAGES/messages.po new file mode 100644 index 0000000..42ba62b --- /dev/null +++ b/SRV/locales/ru/LC_MESSAGES/messages.po @@ -0,0 +1,478 @@ +# Russian translations for PROJECT. +# Copyright (C) 2025 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2025-07-15 15:01+0500\n" +"PO-Revision-Date: 2025-07-15 15:02+0500\n" +"Last-Translator: FULL NAME \n" +"Language: ru\n" +"Language-Team: ru \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: api/v1/auth.py:44 +msgid "Не удалось зарегистрировать пользователя" +msgstr "Не удалось зарегистрировать пользователя" + +#: api/v1/auth.py:75 +msgid "Не удалось авторизовать пользователя" +msgstr "Не удалось авторизовать пользователя" + +#: api/v1/auth.py:103 +msgid "bearer" +msgstr "bearer" + +#: api/v1/auth.py:109 +msgid "Не удалось получить данные пользователя" +msgstr "Не удалось получить данные пользователя" + +#: api/v1/auth.py:136 +msgid "Не удалось выйти из системы" +msgstr "Не удалось выйти из системы" + +#: api/v1/auth.py:162 +msgid "Файл users.json не существует" +msgstr "Файл users.json не существует" + +#: api/v1/auth.py:172 +msgid "Файл users.json существует и содержит пользователей" +msgstr "Файл users.json существует и содержит пользователей" + +#: api/v1/auth.py:179 +msgid "Файл users.json существует, но не содержит пользователей" +msgstr "Файл users.json существует, но не содержит пользователей" + +#: api/v1/auth.py:183 +msgid "Ошибка при проверке файла" +msgstr "Ошибка при проверке файла" + +#: api/v1/ip.py:36 api/v1/ip.py:73 api/v1/ip.py:110 +#, python-brace-format +msgid "Ошибка проверки IP конфигурации: {error}" +msgstr "Ошибка проверки IP конфигурации: {error}" + +#: api/v1/ip.py:64 api/v1/ip.py:101 +#, python-brace-format +msgid "Настройки сетевого профиля для {connection_id} применены" +msgstr "Настройки сетевого профиля для {connection_id} применены" + +#: api/v1/network.py:62 +#, python-brace-format +msgid "Неверное имя контейнера: {container_name}" +msgstr "Неверное имя контейнера: {container_name}" + +#: api/v1/network.py:129 +msgid "Не удалось получить сетевые данные" +msgstr "Не удалось получить сетевые данные" + +#: api/v1/network.py:182 +msgid "" +"Отсутствуют обязательные поля: container_id, container_x, container_y, " +"isOpen" +msgstr "" +"Отсутствуют обязательные поля: container_id, container_x, container_y, " +"isOpen" + +#: api/v1/network.py:194 +msgid "Неверный тип данных в запросе" +msgstr "Неверный тип данных в запросе" + +#: api/v1/network.py:199 +msgid "Позиция и состояние контейнера обновлены" +msgstr "Позиция и состояние контейнера обновлены" + +#: api/v1/network.py:203 +#, python-brace-format +msgid "Не удалось обновить положение контейнера: {error}" +msgstr "Не удалось обновить положение контейнера: {error}" + +#: api/v1/network.py:225 +msgid "Не удалось получить имя хоста" +msgstr "Не удалось получить имя хоста" + +#: api/v1/settings.py:33 +msgid "Данные узлов подсети успешно очищены" +msgstr "Данные узлов подсети успешно очищены" + +#: api/v1/settings.py:35 +msgid "Не удалось очистить данные узлов подсети" +msgstr "Не удалось очистить данные узлов подсети" + +#: api/v1/settings.py:38 api/v1/settings.py:63 api/v1/settings.py:88 +#, python-brace-format +msgid "Ошибка очистки: {error}" +msgstr "Ошибка очистки: {error}" + +#: api/v1/settings.py:58 +msgid "Данные точек доступа Wi-Fi успешно очищены" +msgstr "Данные точек доступа Wi-Fi успешно очищены" + +#: api/v1/settings.py:60 +msgid "Не удалось очистить данные точек доступа Wi-Fi" +msgstr "Не удалось очистить данные точек доступа Wi-Fi" + +#: api/v1/settings.py:83 +msgid "Все сетевые данные успешно очищены" +msgstr "Все сетевые данные успешно очищены" + +#: api/v1/settings.py:85 +msgid "Не удалось очистить все сетевые данные" +msgstr "Не удалось очистить все сетевые данные" + +#: api/v1/settings.py:109 api/v1/settings.py:133 +msgid "Файл не найден" +msgstr "Файл не найден" + +#: api/v1/settings.py:158 +#, python-brace-format +msgid "Язык '{locale}' не поддерживается." +msgstr "Язык '{locale}' не поддерживается." + +#: api/v1/settings.py:164 +#, python-brace-format +msgid "Язык '{locale}' не поддерживается (нет файлов переводов)." +msgstr "Язык '{locale}' не поддерживается (нет файлов переводов)." + +#: api/v1/settings.py:167 +#, python-brace-format +msgid "Язык успешно установлен: {locale}" +msgstr "Язык успешно установлен: {locale}" + +#: api/v1/subnet.py:45 +#, python-brace-format +msgid "Ошибка сканирования: {error}" +msgstr "Ошибка сканирования: {error}" + +#: api/v1/subnet.py:68 +#, python-brace-format +msgid "Ошибка сканирования Wi-Fi: {error}" +msgstr "Ошибка сканирования Wi-Fi: {error}" + +#: api/v1/subnet.py:96 +#, python-brace-format +msgid "Заметка '{note}' добавлена для устройства {mac}" +msgstr "Заметка '{note}' добавлена для устройства {mac}" + +#: api/v1/subnet.py:100 api/v1/subnet.py:195 +#, python-brace-format +msgid "Ошибка добавления заметки: {error}" +msgstr "Ошибка добавления заметки: {error}" + +#: api/v1/subnet.py:128 +#, python-brace-format +msgid "Заметка '{note}' обновлена для устройства {mac}" +msgstr "Заметка '{note}' обновлена для устройства {mac}" + +#: api/v1/subnet.py:132 api/v1/subnet.py:227 +#, python-brace-format +msgid "Ошибка обновления заметки: {error}" +msgstr "Ошибка обновления заметки: {error}" + +#: api/v1/subnet.py:159 +#, python-brace-format +msgid "Заметка удалена для устройства {mac}" +msgstr "Заметка удалена для устройства {mac}" + +#: api/v1/subnet.py:163 api/v1/subnet.py:258 +#, python-brace-format +msgid "Ошибка удаления заметки: {error}" +msgstr "Ошибка удаления заметки: {error}" + +#: api/v1/subnet.py:191 +#, python-brace-format +msgid "Заметка '{note}' добавлена для сети с SSID {ssid}" +msgstr "Заметка '{note}' добавлена для сети с SSID {ssid}" + +#: api/v1/subnet.py:223 +#, python-brace-format +msgid "Заметка '{note}' обновлена для сети с SSID {ssid}" +msgstr "Заметка '{note}' обновлена для сети с SSID {ssid}" + +#: api/v1/subnet.py:254 +#, python-brace-format +msgid "Заметка удалена для сети с SSID {ssid}" +msgstr "Заметка удалена для сети с SSID {ssid}" + +#: api/v1/subnet.py:282 +#, python-brace-format +msgid "Успешно подключено к {ssid}" +msgstr "Успешно подключено к {ssid}" + +#: api/v1/subnet.py:286 +#, python-brace-format +msgid "Ошибка подключения к Wi-Fi: {error}" +msgstr "Ошибка подключения к Wi-Fi: {error}" + +#: api/v1/subnet.py:309 +#, python-brace-format +msgid "Успешно отключено от {ssid}" +msgstr "Успешно отключено от {ssid}" + +#: api/v1/subnet.py:313 +#, python-brace-format +msgid "Ошибка отключения от Wi-Fi: {error}" +msgstr "Ошибка отключения от Wi-Fi: {error}" + +#: api/v1/subnet.py:337 +msgid "connected" +msgstr "connected" + +#: api/v1/subnet.py:341 +#, python-brace-format +msgid "Ошибка проверки статуса Wi-Fi: {error}" +msgstr "Ошибка проверки статуса Wi-Fi: {error}" + +#: api/v1/websocket.py:145 +msgid "Ошибка: Ключ 'activation' отсутствует в полученных данных сети" +msgstr "Ошибка: Ключ 'activation' отсутствует в полученных данных сети" + +#: services/arp_service.py:102 +msgid "Доступные устройства в сети:" +msgstr "Доступные устройства в сети:" + +#: services/arp_service.py:103 +msgid "IP" +msgstr "IP" + +#: services/arp_service.py:103 +msgid "MAC" +msgstr "MAC" + +#: services/auth_service.py:72 +msgid "Ошибка регистрации" +msgstr "Ошибка регистрации" + +#: services/auth_service.py:80 services/auth_service.py:84 +msgid "Неверный логин или пароль" +msgstr "Неверный логин или пароль" + +#: services/auth_service.py:100 +msgid "Ошибка авторизации" +msgstr "Ошибка авторизации" + +#: services/auth_service.py:108 +msgid "Неверный токен" +msgstr "Неверный токен" + +#: services/auth_service.py:113 services/auth_service.py:128 +msgid "Пользователь не найден" +msgstr "Пользователь не найден" + +#: services/auth_service.py:122 +msgid "Сессия недействительна" +msgstr "Сессия недействительна" + +#: services/auth_service.py:144 +msgid "Успешный выход из системы" +msgstr "Успешный выход из системы" + +#: services/auth_service.py:148 +msgid "Ошибка при выходе из системы" +msgstr "Ошибка при выходе из системы" + +#: services/connect_service.py:70 services/connect_service.py:117 +#: services/connect_service.py:154 services/wifi_service.py:227 +msgid "Wi-Fi-интерфейс не доступен" +msgstr "Wi-Fi-интерфейс не доступен" + +#: services/connect_service.py:74 +#, python-brace-format +msgid "Сеть с SSID {ssid} не найдена в списке доступных сетей" +msgstr "Сеть с SSID {ssid} не найдена в списке доступных сетей" + +#: services/connect_service.py:81 services/connect_service.py:92 +#, python-brace-format +msgid "Ошибка подключения к {ssid}: Неверный пароль" +msgstr "Ошибка подключения к {ssid}: Неверный пароль" + +#: services/connect_service.py:83 services/connect_service.py:94 +#, python-brace-format +msgid "" +"Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно " +"указана" +msgstr "" +"Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно " +"указана" + +#: services/connect_service.py:85 services/connect_service.py:95 +#, python-brace-format +msgid "Ошибка подключения к {ssid}: {error}" +msgstr "Ошибка подключения к {ssid}: {error}" + +#: services/connect_service.py:98 +#, python-brace-format +msgid "Ошибка подключения к {ssid}: Неизвестная ошибка - {error}" +msgstr "Ошибка подключения к {ssid}: Неизвестная ошибка - {error}" + +#: services/connect_service.py:122 +#, python-brace-format +msgid "Нет активного подключения для SSID {ssid}" +msgstr "Нет активного подключения для SSID {ssid}" + +#: services/connect_service.py:133 +#, python-brace-format +msgid "Активное подключение с SSID {ssid} не найдено" +msgstr "Активное подключение с SSID {ssid} не найдено" + +#: services/connect_service.py:136 services/connect_service.py:139 +#, python-brace-format +msgid "Ошибка отключения от {ssid}: {error}" +msgstr "Ошибка отключения от {ssid}: {error}" + +#: services/connect_service.py:160 +msgid "Не подключено к Wi-Fi" +msgstr "Не подключено к Wi-Fi" + +#: services/connect_service.py:163 +#, python-brace-format +msgid "Ошибка проверки статуса: {error}" +msgstr "Ошибка проверки статуса: {error}" + +#: services/ip_service.py:69 +#, python-brace-format +msgid "IP-адрес {ip} уже занят." +msgstr "IP-адрес {ip} уже занят." + +#: services/ip_service.py:73 +msgid "Настройки сетевого профиля доступны для использования." +msgstr "Настройки сетевого профиля доступны для использования." + +#: services/ip_service.py:102 +#, python-brace-format +msgid "Подключение {connection_id} не найдено" +msgstr "Подключение {connection_id} не найдено" + +#: services/ip_service.py:130 +#, python-brace-format +msgid "Устройство для интерфейса {interface} не найдено" +msgstr "Устройство для интерфейса {interface} не найдено" + +#: services/network_service.py:232 +#, python-brace-format +msgid "Не удалось выполнить команду hostname: {error}" +msgstr "Не удалось выполнить команду hostname: {error}" + +#: services/network_service.py:234 +#, python-brace-format +msgid "Ошибка обработки вывода hostname: {error}" +msgstr "Ошибка обработки вывода hostname: {error}" + +#: services/settings_service.py:37 +#, python-brace-format +msgid "Ошибка очистки узлов подсети: {error}" +msgstr "Ошибка очистки узлов подсети: {error}" + +#: services/settings_service.py:58 +#, python-brace-format +msgid "Ошибка очистки точек доступа Wi-Fi: {error}" +msgstr "Ошибка очистки точек доступа Wi-Fi: {error}" + +#: services/settings_service.py:84 +#, python-brace-format +msgid "Ошибка очистки всех сетевых данных: {error}" +msgstr "Ошибка очистки всех сетевых данных: {error}" + +#: services/subnet_service.py:75 services/wifi_service.py:115 +msgid "Неизвестный" +msgstr "Неизвестный" + +#: services/subnet_service.py:179 +#, python-brace-format +msgid "Ошибка при сохранении устройств: {error}" +msgstr "Ошибка при сохранении устройств: {error}" + +#: services/subnet_service.py:374 services/subnet_service.py:391 +#: services/subnet_service.py:408 +#, python-brace-format +msgid "Устройство с MAC {mac} не найдено" +msgstr "Устройство с MAC {mac} не найдено" + +#: services/subnet_service.py:377 +#, python-brace-format +msgid "Заметка для устройства с MAC {mac} уже существует" +msgstr "Заметка для устройства с MAC {mac} уже существует" + +#: services/subnet_service.py:384 services/subnet_service.py:401 +#: services/subnet_service.py:418 services/wifi_service.py:319 +#: services/wifi_service.py:337 services/wifi_service.py:355 +#, python-brace-format +msgid "Внутренняя ошибка сервера: {error}" +msgstr "Внутренняя ошибка сервера: {error}" + +#: services/subnet_service.py:394 services/subnet_service.py:411 +#, python-brace-format +msgid "Заметка для устройства с MAC {mac} не существует" +msgstr "Заметка для устройства с MAC {mac} не существует" + +#: services/wifi_service.py:61 +#, python-brace-format +msgid "Ошибка при сохранении заметок: {error}" +msgstr "Ошибка при сохранении заметок: {error}" + +#: services/wifi_service.py:81 +msgid "Не найдено сетевых интерфейсов" +msgstr "Не найдено сетевых интерфейсов" + +#: services/wifi_service.py:102 +msgid "Не найден активный Wi-Fi-интерфейс" +msgstr "Не найден активный Wi-Fi-интерфейс" + +#: services/wifi_service.py:122 +msgid "WPA3" +msgstr "WPA3" + +#: services/wifi_service.py:124 +msgid "WPA2" +msgstr "WPA2" + +#: services/wifi_service.py:126 +msgid "WPA" +msgstr "WPA" + +#: services/wifi_service.py:128 +msgid "WEP" +msgstr "WEP" + +#: services/wifi_service.py:129 +msgid "Открытая" +msgstr "Открытая" + +#: services/wifi_service.py:152 +msgid "2.4 ГГц" +msgstr "2.4 ГГц" + +#: services/wifi_service.py:154 +msgid "5 ГГц" +msgstr "5 ГГц" + +#: services/wifi_service.py:165 +msgid "Интерфейс не определён" +msgstr "Интерфейс не определён" + +#: services/wifi_service.py:215 +msgid "Таймаут при выполнении iw scan" +msgstr "Таймаут при выполнении iw scan" + +#: services/wifi_service.py:312 +#, python-brace-format +msgid "Заметка для сети с SSID {ssid} уже существует" +msgstr "Заметка для сети с SSID {ssid} уже существует" + +#: services/wifi_service.py:327 services/wifi_service.py:345 +#, python-brace-format +msgid "Сеть с SSID {ssid} не найдена" +msgstr "Сеть с SSID {ssid} не найдена" + +#: services/wifi_service.py:330 services/wifi_service.py:348 +#, python-brace-format +msgid "Заметка для сети с SSID {ssid} не существует" +msgstr "Заметка для сети с SSID {ssid} не существует" \ No newline at end of file diff --git a/SRV/locales/ru/LC_MESSAGES/services.mo b/SRV/locales/ru/LC_MESSAGES/services.mo deleted file mode 100644 index 9bb6c5ffe3009b3f8bbfee468da203fc783a0e91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6727 zcmeI0TWl0n7=T9s#abhvctIZy8isMAzC%FLdF-g!rI2SYQ}s+;+mn@I`n%+y_^|{g8j-W1pY; z9D)mZ{-w_eSi${yxE=luAB7=0t%Di34W5P(_$S;6s}~tY6MP*$1b>EYu>1zvU>b^? z&)|LVS15AIZ#0ZGuo>P1_rp8j`>+n4flJ^&@P1g%_orbc zTyTpwpGRPf`!*=@&cGju*>4b)#)VtGIDH2tPCr43(?y8OjfG5FxY%bo#MQFr*ec0uu58&Q)Cl|F zXK)=1-08*1f)eLbunJy+qHpD0UYx>E=G6x!PM`Sv0ZN<}-0j8bX(;nK3S;m*6nRTm z@Ksr{PU++NxO32`n!1R@j7ZGXSv~CZ=@Dn2>Pd9vilA;#+=PXzXc4E+|` z&myYdm5mt_=yO%jKBvJ58gO1^h$|2uF!&nf_;I)vNpsBvcM?9;(;08^o%x?iysVXP z&yyNCea;P?#B;(qCdu)R&Wf*iOc-#pxYhOe2=U12FLaK4kyf&7)b)Q+f)Pr|IEjlM zWu&CmgmZ)>&PhBawVc5UQA6GpB$J|TIx9(sF*RRS&mN0Oc^jR>&H+@6VeFZ3Q}hTqh(Yc|T=V-K9*raLtUI4!XFxrhN@tSsPOBilnV_HblHFrU zq~Sdb6YD1MDzHzamorKrz32jS?9J~{n4?OE1)PGrf%#9xvuIB_o5 z6shnA6;vLtg7o`kr@*5#h8>dp%4?J)JuoW|B#cs*NQ$eIDBl34-V(V15!qdSF>9XB=&NYz%oOBNI1u&qT^L+YCc`23;$H) z6ECQAOFU`lj~LI1ihAi+c*>raTyv)u{ipU-w{TG*r%Ey@HRJ3?miHu*8Ov^qw^;KW zzUC4*`;;MGE;zEq?9_8a+KjZCyDd9S#6v39xMO>`u37C4H#S9fJW6Xu52_Xgr-Uo9%cq-4V~E?2y{JD;iZ#)Ha0G#v;|5%A)aPdw0AY zm3H^^joEC)JLQSm7>#c3NK~Zk_DyB6j&3{NVQx*?o#~KDcDc9dnzhx+yR3O2xhfc_ zsR^pptCd^^R@MZA>M<2ibmx9kP32V6#+r3<>5d3&3=*SY6f- zX$a@N8>|SF)uo7KlKH*Vh1D7B#mt(nj(8$jty-Rq+i5FP)17HEH{|QI#x!S$#py;+prEJ|+{{u#fZ<`o@~OK%oq ziY>47X3^R^-*GF)Pavf?i`mCSIm+c, 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-07-15 11:07+0500\n" -"PO-Revision-Date: 2025-07-15 11:07+0500\n" -"Last-Translator: FULL NAME \n" -"Language: ru\n" -"Language-Team: ru \n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.17.0\n" - -#: services/arp_service.py:102 -msgid "Доступные устройства в сети:" -msgstr "Доступные устройства в сети:" - -#: services/arp_service.py:103 -msgid "IP" -msgstr "IP" - -#: services/arp_service.py:103 -msgid "MAC" -msgstr "MAC" - -#: services/auth_service.py:72 -msgid "Ошибка регистрации" -msgstr "Ошибка регистрации" - -#: services/auth_service.py:80 services/auth_service.py:84 -msgid "Неверный логин или пароль" -msgstr "Неверный логин или пароль" - -#: services/auth_service.py:100 -msgid "Ошибка авторизации" -msgstr "Ошибка авторизации" - -#: services/auth_service.py:108 -msgid "Неверный токен" -msgstr "Неверный токен" - -#: services/auth_service.py:113 services/auth_service.py:128 -msgid "Пользователь не найден" -msgstr "Пользователь не найден" - -#: services/auth_service.py:122 -msgid "Сессия недействительна" -msgstr "Сессия недействительна" - -#: services/auth_service.py:144 -msgid "Успешный выход из системы" -msgstr "Успешный выход из системы" - -#: services/auth_service.py:148 -msgid "Ошибка при выходе из системы" -msgstr "Ошибка при выходе из системы" - -#: services/connect_service.py:70 services/connect_service.py:117 services/connect_service.py:154 services/wifi_service.py:335 -msgid "Wi-Fi-интерфейс не доступен" -msgstr "Wi-Fi-интерфейс не доступен" - -#: services/connect_service.py:74 -#, python-brace-format -msgid "Сеть с SSID {ssid} не найдена в списке доступных сетей" -msgstr "Сеть с SSID {ssid} не найдена в списке доступных сетей" - -#: services/connect_service.py:81 services/connect_service.py:92 -#, python-brace-format -msgid "Ошибка подключения к {ssid}: Неверный пароль" -msgstr "Ошибка подключения к {ssid}: Неверный пароль" - -#: services/connect_service.py:83 services/connect_service.py:94 -#, python-brace-format -msgid "Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно указана" -msgstr "Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно указана" - -#: services/connect_service.py:85 services/connect_service.py:95 -#, python-brace-format -msgid "Ошибка подключения к {ssid}: {error}" -msgstr "Ошибка подключения к {ssid}: {error}" - -#: services/connect_service.py:98 -#, python-brace-format -msgid "Ошибка подключения к {ssid}: Неизвестная ошибка - {error}" -msgstr "Ошибка подключения к {ssid}: Неизвестная ошибка - {error}" - -#: services/connect_service.py:122 -#, python-brace-format -msgid "Нет активного подключения для SSID {ssid}" -msgstr "Нет активного подключения для SSID {ssid}" - -#: services/connect_service.py:133 -#, python-brace-format -msgid "Активное подключение с SSID {ssid} не найдено" -msgstr "Активное подключение с SSID {ssid} не найдено" - -#: services/connect_service.py:136 services/connect_service.py:139 -#, python-brace-format -msgid "Ошибка отключения от {ssid}: {error}" -msgstr "Ошибка отключения от {ssid}: {error}" - -#: services/connect_service.py:160 -msgid "Не подключено к Wi-Fi" -msgstr "Не подключено к Wi-Fi" - -#: services/connect_service.py:163 -#, python-brace-format -msgid "Ошибка проверки статуса: {error}" -msgstr "Ошибка проверки статуса: {error}" - -#: services/ip_service.py:69 -#, python-brace-format -msgid "IP-адрес {ip} уже занят." -msgstr "IP-адрес {ip} уже занят." - -#: services/ip_service.py:73 -msgid "Настройки сетевого профиля доступны для использования." -msgstr "Настройки сетевого профиля доступны для использования." - -#: services/ip_service.py:101 -#, python-brace-format -msgid "Подключение {connection_id} не найдено" -msgstr "Подключение {connection_id} не найдено" - -#: services/ip_service.py:129 -#, python-brace-format -msgid "Устройство для интерфейса {interface} не найдено" -msgstr "Устройство для интерфейса {interface} не найдено" - -#: services/network_service.py:232 -#, python-brace-format -msgid "Не удалось выполнить команду hostname: {error}" -msgstr "Не удалось выполнить команду hostname: {error}" - -#: services/network_service.py:234 -#, python-brace-format -msgid "Ошибка обработки вывода hostname: {error}" -msgstr "Ошибка обработки вывода hostname: {error}" - -#: services/settings_service.py:37 -#, python-brace-format -msgid "Ошибка очистки узлов подсети: {error}" -msgstr "Ошибка очистки узлов подсети: {error}" - -#: services/settings_service.py:58 -#, python-brace-format -msgid "Ошибка очистки точек доступа Wi-Fi: {error}" -msgstr "Ошибка очистки точек доступа Wi-Fi: {error}" - -#: services/settings_service.py:84 -#, python-brace-format -msgid "Ошибка очистки всех сетевых данных: {error}" -msgstr "Ошибка очистки всех сетевых данных: {error}" - -#: services/subnet_service.py:171 services/wifi_service.py:161 -msgid "Неизвестный" -msgstr "Неизвестный" - -#: services/subnet_service.py:319 -#, python-brace-format -msgid "Ошибка при сохранении устройств: {error}" -msgstr "Ошибка при сохранении устройств: {error}" - -#: services/subnet_service.py:524 services/subnet_service.py:558 services/subnet_service.py:591 -#, python-brace-format -msgid "Устройство с MAC {mac} не найдено" -msgstr "Устройство с MAC {mac} не найдено" - -#: services/subnet_service.py:528 -#, python-brace-format -msgid "Заметка для устройства с MAC {mac} уже существует" -msgstr "Заметка для устройства с MAC {mac} уже существует" - -#: services/subnet_service.py:537 services/subnet_service.py:571 services/subnet_service.py:603 services/wifi_service.py:432 services/wifi_service.py:463 services/wifi_service.py:493 -#, python-brace-format -msgid "Внутренняя ошибка сервера: {error}" -msgstr "Внутренняя ошибка сервера: {error}" - -#: services/subnet_service.py:562 services/subnet_service.py:595 -#, python-brace-format -msgid "Заметка для устройства с MAC {mac} не существует" -msgstr "Заметка для устройства с MAC {mac} не существует" - -#: services/wifi_service.py:78 -#, python-brace-format -msgid "Ошибка при сохранении заметок: {error}" -msgstr "Ошибка при сохранении заметок: {error}" - -#: services/wifi_service.py:112 -msgid "Не найдено сетевых интерфейсов" -msgstr "Не найдено сетевых интерфейсов" - -#: services/wifi_service.py:137 -msgid "Не найден активный Wi-Fi-интерфейс" -msgstr "Не найден активный Wi-Fi-интерфейс" - -#: services/wifi_service.py:176 -msgid "WPA3" -msgstr "WPA3" - -#: services/wifi_service.py:178 -msgid "WPA2" -msgstr "WPA2" - -#: services/wifi_service.py:180 -msgid "WPA" -msgstr "WPA" - -#: services/wifi_service.py:182 -msgid "WEP" -msgstr "WEP" - -#: services/wifi_service.py:183 -msgid "Открытая" -msgstr "Открытая" - -#: services/wifi_service.py:222 -msgid "2.4 ГГц" -msgstr "2.4 ГГц" - -#: services/wifi_service.py:224 -msgid "5 ГГц" -msgstr "5 ГГц" - -#: services/wifi_service.py:247 -msgid "Интерфейс не определён" -msgstr "Интерфейс не определён" - -#: services/wifi_service.py:312 -msgid "Таймаут при выполнении iw scan" -msgstr "Таймаут при выполнении iw scan" - -#: services/wifi_service.py:425 -#, python-brace-format -msgid "Заметка для сети с SSID {ssid} уже существует" -msgstr "Заметка для сети с SSID {ssid} уже существует" - -#: services/wifi_service.py:453 services/wifi_service.py:483 -#, python-brace-format -msgid "Сеть с SSID {ssid} не найдена" -msgstr "Сеть с SSID {ssid} не найдена" - -#: services/wifi_service.py:456 services/wifi_service.py:486 -#, python-brace-format -msgid "Заметка для сети с SSID {ssid} не существует" -msgstr "Заметка для сети с SSID {ssid} не существует" - - diff --git a/SRV/poetry.lock b/SRV/poetry.lock index f5b89d4..9d458b2 100644 --- a/SRV/poetry.lock +++ b/SRV/poetry.lock @@ -26,103 +26,103 @@ files = [ [[package]] name = "aiohttp" -version = "3.12.13" +version = "3.12.14" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "aiohttp-3.12.13-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5421af8f22a98f640261ee48aae3a37f0c41371e99412d55eaf2f8a46d5dad29"}, - {file = "aiohttp-3.12.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fcda86f6cb318ba36ed8f1396a6a4a3fd8f856f84d426584392083d10da4de0"}, - {file = "aiohttp-3.12.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cd71c9fb92aceb5a23c4c39d8ecc80389c178eba9feab77f19274843eb9412d"}, - {file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34ebf1aca12845066c963016655dac897651e1544f22a34c9b461ac3b4b1d3aa"}, - {file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:893a4639694c5b7edd4bdd8141be296042b6806e27cc1d794e585c43010cc294"}, - {file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:663d8ee3ffb3494502ebcccb49078faddbb84c1d870f9c1dd5a29e85d1f747ce"}, - {file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0f8f6a85a0006ae2709aa4ce05749ba2cdcb4b43d6c21a16c8517c16593aabe"}, - {file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1582745eb63df267c92d8b61ca655a0ce62105ef62542c00a74590f306be8cb5"}, - {file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d59227776ee2aa64226f7e086638baa645f4b044f2947dbf85c76ab11dcba073"}, - {file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06b07c418bde1c8e737d8fa67741072bd3f5b0fb66cf8c0655172188c17e5fa6"}, - {file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:9445c1842680efac0f81d272fd8db7163acfcc2b1436e3f420f4c9a9c5a50795"}, - {file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:09c4767af0b0b98c724f5d47f2bf33395c8986995b0a9dab0575ca81a554a8c0"}, - {file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f3854fbde7a465318ad8d3fc5bef8f059e6d0a87e71a0d3360bb56c0bf87b18a"}, - {file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2332b4c361c05ecd381edb99e2a33733f3db906739a83a483974b3df70a51b40"}, - {file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1561db63fa1b658cd94325d303933553ea7d89ae09ff21cc3bcd41b8521fbbb6"}, - {file = "aiohttp-3.12.13-cp310-cp310-win32.whl", hash = "sha256:a0be857f0b35177ba09d7c472825d1b711d11c6d0e8a2052804e3b93166de1ad"}, - {file = "aiohttp-3.12.13-cp310-cp310-win_amd64.whl", hash = "sha256:fcc30ad4fb5cb41a33953292d45f54ef4066746d625992aeac33b8c681173178"}, - {file = "aiohttp-3.12.13-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7c229b1437aa2576b99384e4be668af1db84b31a45305d02f61f5497cfa6f60c"}, - {file = "aiohttp-3.12.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04076d8c63471e51e3689c93940775dc3d12d855c0c80d18ac5a1c68f0904358"}, - {file = "aiohttp-3.12.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:55683615813ce3601640cfaa1041174dc956d28ba0511c8cbd75273eb0587014"}, - {file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:921bc91e602d7506d37643e77819cb0b840d4ebb5f8d6408423af3d3bf79a7b7"}, - {file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e72d17fe0974ddeae8ed86db297e23dba39c7ac36d84acdbb53df2e18505a013"}, - {file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0653d15587909a52e024a261943cf1c5bdc69acb71f411b0dd5966d065a51a47"}, - {file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a77b48997c66722c65e157c06c74332cdf9c7ad00494b85ec43f324e5c5a9b9a"}, - {file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6946bae55fd36cfb8e4092c921075cde029c71c7cb571d72f1079d1e4e013bc"}, - {file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f95db8c8b219bcf294a53742c7bda49b80ceb9d577c8e7aa075612b7f39ffb7"}, - {file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:03d5eb3cfb4949ab4c74822fb3326cd9655c2b9fe22e4257e2100d44215b2e2b"}, - {file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6383dd0ffa15515283c26cbf41ac8e6705aab54b4cbb77bdb8935a713a89bee9"}, - {file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6548a411bc8219b45ba2577716493aa63b12803d1e5dc70508c539d0db8dbf5a"}, - {file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:81b0fcbfe59a4ca41dc8f635c2a4a71e63f75168cc91026c61be665945739e2d"}, - {file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6a83797a0174e7995e5edce9dcecc517c642eb43bc3cba296d4512edf346eee2"}, - {file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5734d8469a5633a4e9ffdf9983ff7cdb512524645c7a3d4bc8a3de45b935ac3"}, - {file = "aiohttp-3.12.13-cp311-cp311-win32.whl", hash = "sha256:fef8d50dfa482925bb6b4c208b40d8e9fa54cecba923dc65b825a72eed9a5dbd"}, - {file = "aiohttp-3.12.13-cp311-cp311-win_amd64.whl", hash = "sha256:9a27da9c3b5ed9d04c36ad2df65b38a96a37e9cfba6f1381b842d05d98e6afe9"}, - {file = "aiohttp-3.12.13-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0aa580cf80558557285b49452151b9c69f2fa3ad94c5c9e76e684719a8791b73"}, - {file = "aiohttp-3.12.13-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b103a7e414b57e6939cc4dece8e282cfb22043efd0c7298044f6594cf83ab347"}, - {file = "aiohttp-3.12.13-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78f64e748e9e741d2eccff9597d09fb3cd962210e5b5716047cbb646dc8fe06f"}, - {file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c955989bf4c696d2ededc6b0ccb85a73623ae6e112439398935362bacfaaf6"}, - {file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d640191016763fab76072c87d8854a19e8e65d7a6fcfcbf017926bdbbb30a7e5"}, - {file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4dc507481266b410dede95dd9f26c8d6f5a14315372cc48a6e43eac652237d9b"}, - {file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8a94daa873465d518db073bd95d75f14302e0208a08e8c942b2f3f1c07288a75"}, - {file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f52420cde4ce0bb9425a375d95577fe082cb5721ecb61da3049b55189e4e6"}, - {file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f7df1f620ec40f1a7fbcb99ea17d7326ea6996715e78f71a1c9a021e31b96b8"}, - {file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3062d4ad53b36e17796dce1c0d6da0ad27a015c321e663657ba1cc7659cfc710"}, - {file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:8605e22d2a86b8e51ffb5253d9045ea73683d92d47c0b1438e11a359bdb94462"}, - {file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:54fbbe6beafc2820de71ece2198458a711e224e116efefa01b7969f3e2b3ddae"}, - {file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:050bd277dfc3768b606fd4eae79dd58ceda67d8b0b3c565656a89ae34525d15e"}, - {file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2637a60910b58f50f22379b6797466c3aa6ae28a6ab6404e09175ce4955b4e6a"}, - {file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e986067357550d1aaa21cfe9897fa19e680110551518a5a7cf44e6c5638cb8b5"}, - {file = "aiohttp-3.12.13-cp312-cp312-win32.whl", hash = "sha256:ac941a80aeea2aaae2875c9500861a3ba356f9ff17b9cb2dbfb5cbf91baaf5bf"}, - {file = "aiohttp-3.12.13-cp312-cp312-win_amd64.whl", hash = "sha256:671f41e6146a749b6c81cb7fd07f5a8356d46febdaaaf07b0e774ff04830461e"}, - {file = "aiohttp-3.12.13-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d4a18e61f271127465bdb0e8ff36e8f02ac4a32a80d8927aa52371e93cd87938"}, - {file = "aiohttp-3.12.13-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:532542cb48691179455fab429cdb0d558b5e5290b033b87478f2aa6af5d20ace"}, - {file = "aiohttp-3.12.13-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d7eea18b52f23c050ae9db5d01f3d264ab08f09e7356d6f68e3f3ac2de9dfabb"}, - {file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad7c8e5c25f2a26842a7c239de3f7b6bfb92304593ef997c04ac49fb703ff4d7"}, - {file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6af355b483e3fe9d7336d84539fef460120c2f6e50e06c658fe2907c69262d6b"}, - {file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a95cf9f097498f35c88e3609f55bb47b28a5ef67f6888f4390b3d73e2bac6177"}, - {file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8ed8c38a1c584fe99a475a8f60eefc0b682ea413a84c6ce769bb19a7ff1c5ef"}, - {file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0b9170d5d800126b5bc89d3053a2363406d6e327afb6afaeda2d19ee8bb103"}, - {file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:372feeace612ef8eb41f05ae014a92121a512bd5067db8f25101dd88a8db11da"}, - {file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a946d3702f7965d81f7af7ea8fb03bb33fe53d311df48a46eeca17e9e0beed2d"}, - {file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a0c4725fae86555bbb1d4082129e21de7264f4ab14baf735278c974785cd2041"}, - {file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9b28ea2f708234f0a5c44eb6c7d9eb63a148ce3252ba0140d050b091b6e842d1"}, - {file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d4f5becd2a5791829f79608c6f3dc745388162376f310eb9c142c985f9441cc1"}, - {file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:60f2ce6b944e97649051d5f5cc0f439360690b73909230e107fd45a359d3e911"}, - {file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:69fc1909857401b67bf599c793f2183fbc4804717388b0b888f27f9929aa41f3"}, - {file = "aiohttp-3.12.13-cp313-cp313-win32.whl", hash = "sha256:7d7e68787a2046b0e44ba5587aa723ce05d711e3a3665b6b7545328ac8e3c0dd"}, - {file = "aiohttp-3.12.13-cp313-cp313-win_amd64.whl", hash = "sha256:5a178390ca90419bfd41419a809688c368e63c86bd725e1186dd97f6b89c2706"}, - {file = "aiohttp-3.12.13-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:36f6c973e003dc9b0bb4e8492a643641ea8ef0e97ff7aaa5c0f53d68839357b4"}, - {file = "aiohttp-3.12.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6cbfc73179bd67c229eb171e2e3745d2afd5c711ccd1e40a68b90427f282eab1"}, - {file = "aiohttp-3.12.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1e8b27b2d414f7e3205aa23bb4a692e935ef877e3a71f40d1884f6e04fd7fa74"}, - {file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eabded0c2b2ef56243289112c48556c395d70150ce4220d9008e6b4b3dd15690"}, - {file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:003038e83f1a3ff97409999995ec02fe3008a1d675478949643281141f54751d"}, - {file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b6f46613031dbc92bdcaad9c4c22c7209236ec501f9c0c5f5f0b6a689bf50f3"}, - {file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c332c6bb04650d59fb94ed96491f43812549a3ba6e7a16a218e612f99f04145e"}, - {file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fea41a2c931fb582cb15dc86a3037329e7b941df52b487a9f8b5aa960153cbd"}, - {file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:846104f45d18fb390efd9b422b27d8f3cf8853f1218c537f36e71a385758c896"}, - {file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d6c85ac7dd350f8da2520bac8205ce99df4435b399fa7f4dc4a70407073e390"}, - {file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5a1ecce0ed281bec7da8550da052a6b89552db14d0a0a45554156f085a912f48"}, - {file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5304d74867028cca8f64f1cc1215eb365388033c5a691ea7aa6b0dc47412f495"}, - {file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:64d1f24ee95a2d1e094a4cd7a9b7d34d08db1bbcb8aa9fb717046b0a884ac294"}, - {file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:119c79922a7001ca6a9e253228eb39b793ea994fd2eccb79481c64b5f9d2a055"}, - {file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bb18f00396d22e2f10cd8825d671d9f9a3ba968d708a559c02a627536b36d91c"}, - {file = "aiohttp-3.12.13-cp39-cp39-win32.whl", hash = "sha256:0022de47ef63fd06b065d430ac79c6b0bd24cdae7feaf0e8c6bac23b805a23a8"}, - {file = "aiohttp-3.12.13-cp39-cp39-win_amd64.whl", hash = "sha256:29e08111ccf81b2734ae03f1ad1cb03b9615e7d8f616764f22f71209c094f122"}, - {file = "aiohttp-3.12.13.tar.gz", hash = "sha256:47e2da578528264a12e4e3dd8dd72a7289e5f812758fe086473fab037a10fcce"}, + {file = "aiohttp-3.12.14-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:906d5075b5ba0dd1c66fcaaf60eb09926a9fef3ca92d912d2a0bbdbecf8b1248"}, + {file = "aiohttp-3.12.14-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c875bf6fc2fd1a572aba0e02ef4e7a63694778c5646cdbda346ee24e630d30fb"}, + {file = "aiohttp-3.12.14-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fbb284d15c6a45fab030740049d03c0ecd60edad9cd23b211d7e11d3be8d56fd"}, + {file = "aiohttp-3.12.14-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38e360381e02e1a05d36b223ecab7bc4a6e7b5ab15760022dc92589ee1d4238c"}, + {file = "aiohttp-3.12.14-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:aaf90137b5e5d84a53632ad95ebee5c9e3e7468f0aab92ba3f608adcb914fa95"}, + {file = "aiohttp-3.12.14-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e532a25e4a0a2685fa295a31acf65e027fbe2bea7a4b02cdfbbba8a064577663"}, + {file = "aiohttp-3.12.14-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eab9762c4d1b08ae04a6c77474e6136da722e34fdc0e6d6eab5ee93ac29f35d1"}, + {file = "aiohttp-3.12.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abe53c3812b2899889a7fca763cdfaeee725f5be68ea89905e4275476ffd7e61"}, + {file = "aiohttp-3.12.14-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5760909b7080aa2ec1d320baee90d03b21745573780a072b66ce633eb77a8656"}, + {file = "aiohttp-3.12.14-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:02fcd3f69051467bbaa7f84d7ec3267478c7df18d68b2e28279116e29d18d4f3"}, + {file = "aiohttp-3.12.14-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:4dcd1172cd6794884c33e504d3da3c35648b8be9bfa946942d353b939d5f1288"}, + {file = "aiohttp-3.12.14-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:224d0da41355b942b43ad08101b1b41ce633a654128ee07e36d75133443adcda"}, + {file = "aiohttp-3.12.14-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e387668724f4d734e865c1776d841ed75b300ee61059aca0b05bce67061dcacc"}, + {file = "aiohttp-3.12.14-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:dec9cde5b5a24171e0b0a4ca064b1414950904053fb77c707efd876a2da525d8"}, + {file = "aiohttp-3.12.14-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bbad68a2af4877cc103cd94af9160e45676fc6f0c14abb88e6e092b945c2c8e3"}, + {file = "aiohttp-3.12.14-cp310-cp310-win32.whl", hash = "sha256:ee580cb7c00bd857b3039ebca03c4448e84700dc1322f860cf7a500a6f62630c"}, + {file = "aiohttp-3.12.14-cp310-cp310-win_amd64.whl", hash = "sha256:cf4f05b8cea571e2ccc3ca744e35ead24992d90a72ca2cf7ab7a2efbac6716db"}, + {file = "aiohttp-3.12.14-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f4552ff7b18bcec18b60a90c6982049cdb9dac1dba48cf00b97934a06ce2e597"}, + {file = "aiohttp-3.12.14-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8283f42181ff6ccbcf25acaae4e8ab2ff7e92b3ca4a4ced73b2c12d8cd971393"}, + {file = "aiohttp-3.12.14-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:040afa180ea514495aaff7ad34ec3d27826eaa5d19812730fe9e529b04bb2179"}, + {file = "aiohttp-3.12.14-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b413c12f14c1149f0ffd890f4141a7471ba4b41234fe4fd4a0ff82b1dc299dbb"}, + {file = "aiohttp-3.12.14-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1d6f607ce2e1a93315414e3d448b831238f1874b9968e1195b06efaa5c87e245"}, + {file = "aiohttp-3.12.14-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:565e70d03e924333004ed101599902bba09ebb14843c8ea39d657f037115201b"}, + {file = "aiohttp-3.12.14-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4699979560728b168d5ab63c668a093c9570af2c7a78ea24ca5212c6cdc2b641"}, + {file = "aiohttp-3.12.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad5fdf6af93ec6c99bf800eba3af9a43d8bfd66dce920ac905c817ef4a712afe"}, + {file = "aiohttp-3.12.14-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ac76627c0b7ee0e80e871bde0d376a057916cb008a8f3ffc889570a838f5cc7"}, + {file = "aiohttp-3.12.14-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:798204af1180885651b77bf03adc903743a86a39c7392c472891649610844635"}, + {file = "aiohttp-3.12.14-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:4f1205f97de92c37dd71cf2d5bcfb65fdaed3c255d246172cce729a8d849b4da"}, + {file = "aiohttp-3.12.14-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:76ae6f1dd041f85065d9df77c6bc9c9703da9b5c018479d20262acc3df97d419"}, + {file = "aiohttp-3.12.14-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a194ace7bc43ce765338ca2dfb5661489317db216ea7ea700b0332878b392cab"}, + {file = "aiohttp-3.12.14-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:16260e8e03744a6fe3fcb05259eeab8e08342c4c33decf96a9dad9f1187275d0"}, + {file = "aiohttp-3.12.14-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8c779e5ebbf0e2e15334ea404fcce54009dc069210164a244d2eac8352a44b28"}, + {file = "aiohttp-3.12.14-cp311-cp311-win32.whl", hash = "sha256:a289f50bf1bd5be227376c067927f78079a7bdeccf8daa6a9e65c38bae14324b"}, + {file = "aiohttp-3.12.14-cp311-cp311-win_amd64.whl", hash = "sha256:0b8a69acaf06b17e9c54151a6c956339cf46db4ff72b3ac28516d0f7068f4ced"}, + {file = "aiohttp-3.12.14-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a0ecbb32fc3e69bc25efcda7d28d38e987d007096cbbeed04f14a6662d0eee22"}, + {file = "aiohttp-3.12.14-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0400f0ca9bb3e0b02f6466421f253797f6384e9845820c8b05e976398ac1d81a"}, + {file = "aiohttp-3.12.14-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a56809fed4c8a830b5cae18454b7464e1529dbf66f71c4772e3cfa9cbec0a1ff"}, + {file = "aiohttp-3.12.14-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27f2e373276e4755691a963e5d11756d093e346119f0627c2d6518208483fb6d"}, + {file = "aiohttp-3.12.14-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:ca39e433630e9a16281125ef57ece6817afd1d54c9f1bf32e901f38f16035869"}, + {file = "aiohttp-3.12.14-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c748b3f8b14c77720132b2510a7d9907a03c20ba80f469e58d5dfd90c079a1c"}, + {file = "aiohttp-3.12.14-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0a568abe1b15ce69d4cc37e23020720423f0728e3cb1f9bcd3f53420ec3bfe7"}, + {file = "aiohttp-3.12.14-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9888e60c2c54eaf56704b17feb558c7ed6b7439bca1e07d4818ab878f2083660"}, + {file = "aiohttp-3.12.14-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3006a1dc579b9156de01e7916d38c63dc1ea0679b14627a37edf6151bc530088"}, + {file = "aiohttp-3.12.14-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:aa8ec5c15ab80e5501a26719eb48a55f3c567da45c6ea5bb78c52c036b2655c7"}, + {file = "aiohttp-3.12.14-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:39b94e50959aa07844c7fe2206b9f75d63cc3ad1c648aaa755aa257f6f2498a9"}, + {file = "aiohttp-3.12.14-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:04c11907492f416dad9885d503fbfc5dcb6768d90cad8639a771922d584609d3"}, + {file = "aiohttp-3.12.14-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:88167bd9ab69bb46cee91bd9761db6dfd45b6e76a0438c7e884c3f8160ff21eb"}, + {file = "aiohttp-3.12.14-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:791504763f25e8f9f251e4688195e8b455f8820274320204f7eafc467e609425"}, + {file = "aiohttp-3.12.14-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2785b112346e435dd3a1a67f67713a3fe692d288542f1347ad255683f066d8e0"}, + {file = "aiohttp-3.12.14-cp312-cp312-win32.whl", hash = "sha256:15f5f4792c9c999a31d8decf444e79fcfd98497bf98e94284bf390a7bb8c1729"}, + {file = "aiohttp-3.12.14-cp312-cp312-win_amd64.whl", hash = "sha256:3b66e1a182879f579b105a80d5c4bd448b91a57e8933564bf41665064796a338"}, + {file = "aiohttp-3.12.14-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:3143a7893d94dc82bc409f7308bc10d60285a3cd831a68faf1aa0836c5c3c767"}, + {file = "aiohttp-3.12.14-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3d62ac3d506cef54b355bd34c2a7c230eb693880001dfcda0bf88b38f5d7af7e"}, + {file = "aiohttp-3.12.14-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:48e43e075c6a438937c4de48ec30fa8ad8e6dfef122a038847456bfe7b947b63"}, + {file = "aiohttp-3.12.14-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:077b4488411a9724cecc436cbc8c133e0d61e694995b8de51aaf351c7578949d"}, + {file = "aiohttp-3.12.14-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d8c35632575653f297dcbc9546305b2c1133391089ab925a6a3706dfa775ccab"}, + {file = "aiohttp-3.12.14-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b8ce87963f0035c6834b28f061df90cf525ff7c9b6283a8ac23acee6502afd4"}, + {file = "aiohttp-3.12.14-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0a2cf66e32a2563bb0766eb24eae7e9a269ac0dc48db0aae90b575dc9583026"}, + {file = "aiohttp-3.12.14-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdea089caf6d5cde975084a884c72d901e36ef9c2fd972c9f51efbbc64e96fbd"}, + {file = "aiohttp-3.12.14-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a7865f27db67d49e81d463da64a59365ebd6b826e0e4847aa111056dcb9dc88"}, + {file = "aiohttp-3.12.14-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0ab5b38a6a39781d77713ad930cb5e7feea6f253de656a5f9f281a8f5931b086"}, + {file = "aiohttp-3.12.14-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:9b3b15acee5c17e8848d90a4ebc27853f37077ba6aec4d8cb4dbbea56d156933"}, + {file = "aiohttp-3.12.14-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e4c972b0bdaac167c1e53e16a16101b17c6d0ed7eac178e653a07b9f7fad7151"}, + {file = "aiohttp-3.12.14-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7442488b0039257a3bdbc55f7209587911f143fca11df9869578db6c26feeeb8"}, + {file = "aiohttp-3.12.14-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f68d3067eecb64c5e9bab4a26aa11bd676f4c70eea9ef6536b0a4e490639add3"}, + {file = "aiohttp-3.12.14-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f88d3704c8b3d598a08ad17d06006cb1ca52a1182291f04979e305c8be6c9758"}, + {file = "aiohttp-3.12.14-cp313-cp313-win32.whl", hash = "sha256:a3c99ab19c7bf375c4ae3debd91ca5d394b98b6089a03231d4c580ef3c2ae4c5"}, + {file = "aiohttp-3.12.14-cp313-cp313-win_amd64.whl", hash = "sha256:3f8aad695e12edc9d571f878c62bedc91adf30c760c8632f09663e5f564f4baa"}, + {file = "aiohttp-3.12.14-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b8cc6b05e94d837bcd71c6531e2344e1ff0fb87abe4ad78a9261d67ef5d83eae"}, + {file = "aiohttp-3.12.14-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1dcb015ac6a3b8facd3677597edd5ff39d11d937456702f0bb2b762e390a21b"}, + {file = "aiohttp-3.12.14-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3779ed96105cd70ee5e85ca4f457adbce3d9ff33ec3d0ebcdf6c5727f26b21b3"}, + {file = "aiohttp-3.12.14-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:717a0680729b4ebd7569c1dcd718c46b09b360745fd8eb12317abc74b14d14d0"}, + {file = "aiohttp-3.12.14-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b5dd3a2ef7c7e968dbbac8f5574ebeac4d2b813b247e8cec28174a2ba3627170"}, + {file = "aiohttp-3.12.14-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4710f77598c0092239bc12c1fcc278a444e16c7032d91babf5abbf7166463f7b"}, + {file = "aiohttp-3.12.14-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f3e9f75ae842a6c22a195d4a127263dbf87cbab729829e0bd7857fb1672400b2"}, + {file = "aiohttp-3.12.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f9c8d55d6802086edd188e3a7d85a77787e50d56ce3eb4757a3205fa4657922"}, + {file = "aiohttp-3.12.14-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:79b29053ff3ad307880d94562cca80693c62062a098a5776ea8ef5ef4b28d140"}, + {file = "aiohttp-3.12.14-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23e1332fff36bebd3183db0c7a547a1da9d3b4091509f6d818e098855f2f27d3"}, + {file = "aiohttp-3.12.14-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:a564188ce831fd110ea76bcc97085dd6c625b427db3f1dbb14ca4baa1447dcbc"}, + {file = "aiohttp-3.12.14-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a7a1b4302f70bb3ec40ca86de82def532c97a80db49cac6a6700af0de41af5ee"}, + {file = "aiohttp-3.12.14-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:1b07ccef62950a2519f9bfc1e5b294de5dd84329f444ca0b329605ea787a3de5"}, + {file = "aiohttp-3.12.14-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:938bd3ca6259e7e48b38d84f753d548bd863e0c222ed6ee6ace3fd6752768a84"}, + {file = "aiohttp-3.12.14-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8bc784302b6b9f163b54c4e93d7a6f09563bd01ff2b841b29ed3ac126e5040bf"}, + {file = "aiohttp-3.12.14-cp39-cp39-win32.whl", hash = "sha256:a3416f95961dd7d5393ecff99e3f41dc990fb72eda86c11f2a60308ac6dcd7a0"}, + {file = "aiohttp-3.12.14-cp39-cp39-win_amd64.whl", hash = "sha256:196858b8820d7f60578f8b47e5669b3195c21d8ab261e39b1d705346458f445f"}, + {file = "aiohttp-3.12.14.tar.gz", hash = "sha256:6e06e120e34d93100de448fd941522e11dafa78ef1a893c179901b7d66aa29f2"}, ] [package.dependencies] aiohappyeyeballs = ">=2.5.0" -aiosignal = ">=1.1.2" +aiosignal = ">=1.4.0" attrs = ">=17.3.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" @@ -347,14 +347,14 @@ redis = ["redis (>=2.10.5)"] [[package]] name = "certifi" -version = "2025.7.9" +version = "2025.7.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" groups = ["main"] files = [ - {file = "certifi-2025.7.9-py3-none-any.whl", hash = "sha256:d842783a14f8fdd646895ac26f719a061408834473cfc10203f6a575beb15d39"}, - {file = "certifi-2025.7.9.tar.gz", hash = "sha256:c1d2ec05395148ee10cf672ffc28cd37ea0ab0d99f9cc74c43e588cbd111b079"}, + {file = "certifi-2025.7.14-py3-none-any.whl", hash = "sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2"}, + {file = "certifi-2025.7.14.tar.gz", hash = "sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995"}, ] [[package]] @@ -868,14 +868,14 @@ standard-no-fastapi-cloud-cli = ["uvicorn[standard] (>=0.15.0)"] [[package]] name = "fastapi-cloud-cli" -version = "0.1.2" +version = "0.1.4" description = "Deploy and manage FastAPI Cloud apps from the command line 🚀" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "fastapi_cloud_cli-0.1.2-py3-none-any.whl", hash = "sha256:d310db4b80297184f9525f4c63952e464e4f18513ec8d6db9271030d5ffe5af4"}, - {file = "fastapi_cloud_cli-0.1.2.tar.gz", hash = "sha256:401abf00856211d1bfb8b24b1b8e8d5b9ff3a11037f7ca03723f6ba27008dde4"}, + {file = "fastapi_cloud_cli-0.1.4-py3-none-any.whl", hash = "sha256:1db1ba757aa46a16a5e5dacf7cddc137ca0a3c42f65dba2b1cc6a8f24c41be42"}, + {file = "fastapi_cloud_cli-0.1.4.tar.gz", hash = "sha256:a0ab7633d71d864b4041896b3fe2f462de61546db7c52eb13e963f4d40af0eba"}, ] [package.dependencies] @@ -1796,14 +1796,14 @@ totp = ["cryptography"] [[package]] name = "pbs-installer" -version = "2025.7.2" +version = "2025.7.12" description = "Installer for Python Build Standalone" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "pbs_installer-2025.7.2-py3-none-any.whl", hash = "sha256:dd778682922f200174e41cf4e019030d412430756d085cf986237c7c23f67ea9"}, - {file = "pbs_installer-2025.7.2.tar.gz", hash = "sha256:72026d253a6f002514aa0bfb4a650a20333102e7679df0fff810b858720598d9"}, + {file = "pbs_installer-2025.7.12-py3-none-any.whl", hash = "sha256:d73414224fceb60d4a07bea97facd9acc05de792dd7becc90a7f22383e7c1cab"}, + {file = "pbs_installer-2025.7.12.tar.gz", hash = "sha256:343b8905e1da3cd4b03b68d630086330dde1814294963b77d2664b18b5002ac6"}, ] [package.dependencies] @@ -2588,151 +2588,131 @@ typing-extensions = ">=4.12.2" [[package]] name = "rignore" -version = "0.5.1" +version = "0.6.2" description = "Python Bindings for the ignore crate" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "rignore-0.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c926be8c262fadd87bde39a68eef0e6e4b97f063eac776622db6465709f57acc"}, - {file = "rignore-0.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e9b0b0b441b462796c0ff4ee78b77a87e515a932843505a63c1bc1db74a1193"}, - {file = "rignore-0.5.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:70ea0fb7afe191b867f3a91c090a79d68f7b341953887dd21b0c725c8887c14d"}, - {file = "rignore-0.5.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f4ea9e1e37239cba02612dda4eab29c4a6c563d4e6bfa3c118d872e36f45920"}, - {file = "rignore-0.5.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed5631c60755e001002e4a4a9d3c018570e293255f007c7aa6f734ffd24a4f94"}, - {file = "rignore-0.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:906dfe99a7127c5c0e54cc5016baba9ba35a62c783b333c67d104a194c35fca7"}, - {file = "rignore-0.5.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:caa181ea17829c8cf1d113e986ae6a921e8e17162574b7ba91c371fb24b23593"}, - {file = "rignore-0.5.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2bcf3abf88698108ec0b2c3c2d0bd06ce2176d5c61a7c23049dfa167703b89ee"}, - {file = "rignore-0.5.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc3cc35494ff4218a7f57e72b8000e3a5f1c8f07e64c1a3fe3da1a873ea1c746"}, - {file = "rignore-0.5.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9e3b39a0024b106943a338b7efea716a65c67d41f689a624b28c23e797cc8603"}, - {file = "rignore-0.5.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2c3013d93760a1eabc73e206efaa0c537d8f4a4fc23fe08fc56a141825a671c3"}, - {file = "rignore-0.5.1-cp310-cp310-win32.whl", hash = "sha256:d6949537d62c003af3f7a9fb7797ac4497afbef1024da129246ac55996f374dd"}, - {file = "rignore-0.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:6241882eea691cf46f704f99bad913fc4358d18610cc29d09ee41b0210e59902"}, - {file = "rignore-0.5.1-cp310-none-win32.whl", hash = "sha256:0b61323845e96cb1884e8fbcc297164a02f5cd7aa77fd96b49a405b73959d008"}, - {file = "rignore-0.5.1-cp310-none-win_amd64.whl", hash = "sha256:4e0e2bb50f2eab60fd7183532925a1dc758e131cf7d65f711d38a29bfb9f97bb"}, - {file = "rignore-0.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6086dcd720475cbfd68978f57a549c85e15544c819ea26fb78262e384080c4a2"}, - {file = "rignore-0.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ead6bec0cfd23527cadba640a1dfeff32dc944cd25fff8327a8debd995441efc"}, - {file = "rignore-0.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0d3731551484aa6a78a319ba55d36ae5d34395e2df7aef8fd2ad84a1f24365"}, - {file = "rignore-0.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:563f48c561fcb12c5f3fbd7a67434f84739961fb794c8d371789be2d1732d520"}, - {file = "rignore-0.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7e0c097f3d8e0af8df46ba7587ad4d71e386dd9b47740afef03b4a9da2e0725e"}, - {file = "rignore-0.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71cc68938c7d17f571bddb2f4d52cd5c087edf258aa0bf0076dfcb9a48aea018"}, - {file = "rignore-0.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9d71f376c14015fbde075571ca6e5de12f2f470b6a1e1eb88d5fc1bd7dd7f05"}, - {file = "rignore-0.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0af519e4286634a16c3c8c7becaccd27125cd23b3d7656f9baf2957da12d8a80"}, - {file = "rignore-0.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ad7e2603533cf5125bf50bdaa513ca75b8cf72ac45b014b8f9f7d52d23d50848"}, - {file = "rignore-0.5.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:8f1b647c05937f358c1521a1da29018f5ad06bd77cc7e2c1a2526ca2fc749bef"}, - {file = "rignore-0.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b29838382551ab11e874cfa05de98e3eb6076d6ce33e0eb421574a63de8203b3"}, - {file = "rignore-0.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89b27f78d96f9f34b61bdb713ed988822206bc20ee9ba01a3169925a6997ceaf"}, - {file = "rignore-0.5.1-cp311-cp311-win32.whl", hash = "sha256:a5c57f1180db90a120002ef584ab7d92d68dd48665d42ab3fc89e39aa815db57"}, - {file = "rignore-0.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:75bfc98896bb606cb2cea1aa7cc59534eaf7f7153750ed10bcfc0ff79d79f635"}, - {file = "rignore-0.5.1-cp311-none-win32.whl", hash = "sha256:051615fdbd5659e2ffa04ccd3356b6a2b01c8a29288b2a6cf6e9dd39ae437671"}, - {file = "rignore-0.5.1-cp311-none-win_amd64.whl", hash = "sha256:f4a5ea2f4bfd6472532a676eb671a91dde756772b0ba40a808db200c2b55c2e3"}, - {file = "rignore-0.5.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:85773791eb6273eadde1e33bbc89051a35dee222443e1a54a7bb4ba7ae42e09a"}, - {file = "rignore-0.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5f7f778121e7b0a788280276e236ae945803dd36a89824ccb8e8cb6ec04fc8a"}, - {file = "rignore-0.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0056329d3a41003213a9e002847ce81fbdae4a354ee668fda4519b094e7280aa"}, - {file = "rignore-0.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:642c91f6ee7abb6d053384b1a199afc19342953f0725474d6516c9719e13aed2"}, - {file = "rignore-0.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:165a9e318284ffd481e4b70139b36bc8df0943dc2488649500e80fc5f118ff44"}, - {file = "rignore-0.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0dc361f660f369075bbebf1781bf56d3777e0430ab7e24aa39a9bb865c9c8b05"}, - {file = "rignore-0.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59ae296608c432ffc5641033e49876c54cf46042153d1cbdddad8001309cddc9"}, - {file = "rignore-0.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e50d26cf231d7fa2653527c6f476ee7a57a3dfe4aa164ecb8def477ecdd3470f"}, - {file = "rignore-0.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8c9782269163f60f01e38f3265bdd679709a4f3d22ecdfdcaebe05ab9116a406"}, - {file = "rignore-0.5.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a2439956bfd57c341676a1d7cba2e6ea2b37c2cc3cc27c5e0aefaa86f1d9704d"}, - {file = "rignore-0.5.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7bcffef09152a84d0570f297292ad8d4cf88926b65c9512f547240e6b1b3459"}, - {file = "rignore-0.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d1a2a74c305d751283dc49f3924c61ef71873deb2221a6d58044dd4b0bd897ee"}, - {file = "rignore-0.5.1-cp312-cp312-win32.whl", hash = "sha256:1acac61c68a62e163a12a9b0b81d74ed794095ca8ff37caa13d9765d445c1864"}, - {file = "rignore-0.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:9e8ca4435abd3da477e8035218de061eafa3b0a6ddde1683c0b4489c9ffd8676"}, - {file = "rignore-0.5.1-cp312-none-win32.whl", hash = "sha256:591b73025e1fcce23f2ea83b2b53dae33680825c647603b18461f65a3af78990"}, - {file = "rignore-0.5.1-cp312-none-win_amd64.whl", hash = "sha256:d05d66bb5807395c55b252a0c4bc23b3462413c0d9f8c25b57c0c9b460838a15"}, - {file = "rignore-0.5.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f47ad5e46d362117101149bd25334fc3628db7114d6ba7891b61faa5347db8e3"}, - {file = "rignore-0.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cbcbec90cf2b3984acd847ae0858e85c099340b32e647ddfe9c1bd05b4138a91"}, - {file = "rignore-0.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32a859a78f2bd6addd265b440dc86550e67fcd0a899425c71fa17e6cddf05b5d"}, - {file = "rignore-0.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:26e4e35dfe36ec0922c768fd05ace0d8c163ac59eb397571d5b842c21474d3ce"}, - {file = "rignore-0.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52922bca5a5abfe9b6ad04accae625a26dfc1d62d91112d2986bc88288c7d5d9"}, - {file = "rignore-0.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49f264718bf4810ad3833d706b00d4d48986c00318844b40a6e992debdff64d9"}, - {file = "rignore-0.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e27c344fe7a04ba99b040a7e99a5d4b962dea47f0643bafae03843a53037390d"}, - {file = "rignore-0.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3853ffd97ab6cdf54e61cffdf9cca526f7ccd130918e72e1a2fc5cd26e14906e"}, - {file = "rignore-0.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a3fc73e98b03f0555c46dc4ebe2f81cffa22aa425c0efefcb7feb939e9cc5018"}, - {file = "rignore-0.5.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:eb3e0408941530f3e268bf2595b3783eb714bfd854be748b7631589adc0ccae7"}, - {file = "rignore-0.5.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:54c4d1d89b0b90e4634fc3fb3bb2e81e0ed12e07c64d5e766041a6052c6f3426"}, - {file = "rignore-0.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:caf4f5acf710050154c1fef5269a2e586c663bf87980fded85891264ad4a4f4e"}, - {file = "rignore-0.5.1-cp313-cp313-win32.whl", hash = "sha256:4ec97d10848d4c5172f3cb04fbc5da52e74aa6a53eab4a0e3246bb84bd59e698"}, - {file = "rignore-0.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:f2d5e4ff4a6c92611b7bd14f734b4f8ccc814f4014f46fade2afa6f458093159"}, - {file = "rignore-0.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aea02cf87fda3e80521e6ae526f79d19ce483e2b53c73377b2e28a954ddc27d1"}, - {file = "rignore-0.5.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ea22314219d38a7f2bd2fa63a21c93a8f1a0254e04282fce895f017d1cd21dd"}, - {file = "rignore-0.5.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f2f1d8049cfce3c2d986e98e50d816f43620ae38cd520eabaf0d86004e571ca"}, - {file = "rignore-0.5.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d2bba4194c6a90e97c0ef108f110b86be6797db8681ec2b8639c587f2ae595c"}, - {file = "rignore-0.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:840a85ad39c93520031b6e0dda5fa79c32c242a991b95f1e791b174d3b711159"}, - {file = "rignore-0.5.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:ec9ce7fe282e819f9a9a2305676cd90610d9ed053563467f2ddd8090e7acebb9"}, - {file = "rignore-0.5.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:733af4ef28c55843e06ab09532d5883d1e15e96af3868f68dcc14b9689e5dd36"}, - {file = "rignore-0.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:763e36b91607d012d529cdbd45ab6268166d6834dda4d9c931efe0fd93e01a7f"}, - {file = "rignore-0.5.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d1d9c8c4cbb3969ca5bb6fb35c694c00fb21cfa81eba7592353cd6d46d358aa4"}, - {file = "rignore-0.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1065c718df75a3af288f73099787625bede866acd51b22e28873bcb0c46b7208"}, - {file = "rignore-0.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16895cb259de0720c997da14227ede1e6b829c0cdd2df6803eb9cde8c10d9cd0"}, - {file = "rignore-0.5.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cd6dc77caab5cde4c5c6048910816c804f91d3f4130657001879535e46450826"}, - {file = "rignore-0.5.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7731421ea1aca75b7f8ccab0137015899608055292cf8fa67ba551d35b3153fd"}, - {file = "rignore-0.5.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0000e2e5486ba034daa626fbbaf59741c693fd14ba6d9647043296ddef72da85"}, - {file = "rignore-0.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b4af8b587f9ed27db59dcd0950ae481a9994996e3566f420aa039044882063a"}, - {file = "rignore-0.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bef748a58e50b0e0582079002ccc2f2c8f251d4bf62494ebdcaefc868e8e6795"}, - {file = "rignore-0.5.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2bb5e881c0b74b48e8314b90fdf5e6f3b257b07efeb5d419454a479d71eb554c"}, - {file = "rignore-0.5.1-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:6a08900c6aa62ac5717d17c23ae1502ad33973f780150809e45ba13e5fbb739e"}, - {file = "rignore-0.5.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:79bfbf439b8e718022b851d525573355011ee48fde6b9442314b71cfb74be663"}, - {file = "rignore-0.5.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:248a49f9f675973504ea3df096ef52b50ea514bfcae5b44ea1efbf1ad170f1f5"}, - {file = "rignore-0.5.1-cp38-cp38-win32.whl", hash = "sha256:ce3b476676bae9eb6f49f413d0e62ba9146eb5e3d30815a16315eacd60cc8d2f"}, - {file = "rignore-0.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:606cd1403509d7a446eb651ea622ef0b315e91d3bad1947d5f12ac782b53cb28"}, - {file = "rignore-0.5.1-cp38-none-win32.whl", hash = "sha256:5c29a3c14408cf85ff782af43ff38b8d1da8464ebe50ba3e521a987984e75dba"}, - {file = "rignore-0.5.1-cp38-none-win_amd64.whl", hash = "sha256:76f78853e010265b8355140466d4fd3b36ce179840604eecf729a6c55b36d45c"}, - {file = "rignore-0.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:82511a8ba9f7be3803332c57b2ed8b39a986695add29480be5715da2c0e214a8"}, - {file = "rignore-0.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49c501efee582263cbfc1919d652211f40ed2a3567d77bfe7936029137f7cf8f"}, - {file = "rignore-0.5.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3e56ee2d57fa3f9a77452d69dc84e39f4339ccf772bb83df0d19e9c05b0e2765"}, - {file = "rignore-0.5.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:744948b708792e58f7ce40db3607faa2f39318df5cc03ebe2f513f54ade09964"}, - {file = "rignore-0.5.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:546cb0ca7305ad5a3def1036fc425477b0f40ecf55bc87c0f774986766e6946a"}, - {file = "rignore-0.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00df04513383fd8750e3a38b87f9cb027788fa5865c181824b4e3e4e7f8832c6"}, - {file = "rignore-0.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16fbd2ce2161c252b07f4da071f2be1a38687f956dd11dcf33e80a98e2a02fdc"}, - {file = "rignore-0.5.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:057847198b84434ff901dbff873ad12b99f2e5b5c02e897021e561f62f8e4977"}, - {file = "rignore-0.5.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:58f73c2df6a25fcec226167863949d5a4413ef319c0e373d70d59121b9571680"}, - {file = "rignore-0.5.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5e8d98a2c07d47983b03c1911403ad35a787973fa56500c4a81ade345d2230ec"}, - {file = "rignore-0.5.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d0008f6d38f00c95f0c4a0281767ddf46b20d3e54a00769005440c62ad4f63ff"}, - {file = "rignore-0.5.1-cp39-cp39-win32.whl", hash = "sha256:f1090822fa8193b14ac024e99aeec18d366666623dcb8d3acf4c0db1a81aa911"}, - {file = "rignore-0.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:970f9d2bb63161d9183489cc55d87a741c1e10fb50f9d2288712be3b91bed495"}, - {file = "rignore-0.5.1-cp39-none-win32.whl", hash = "sha256:a476a876f66067fa4d04d73687bfe81886a8a9c0d7426c00acebcd238d0792ac"}, - {file = "rignore-0.5.1-cp39-none-win_amd64.whl", hash = "sha256:35e3418da52db58c9ef1900bc9c32f87fe769989bbe5cf57a0d2a413a2fe8727"}, - {file = "rignore-0.5.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5b011bb02a9a991935bdbce4f24fc51dcc58d0fb94690750bd9b4a64aa557d2"}, - {file = "rignore-0.5.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f694d3d682f971ac6356ef545defbc4b4da129eb81f114649a7794aa75f87c6"}, - {file = "rignore-0.5.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ba4cee9a96fae66187c9cac3c19b47199107d2e5a675ee8befe17fb846dbe07"}, - {file = "rignore-0.5.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f1e62bc1165bda9d346b5c8eb6363f6eba1665c5f1dc38fb5845bbc6fc37900"}, - {file = "rignore-0.5.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:920fac4ba44065a0158337004ee5e051243d79df278326763686efc3d00f2663"}, - {file = "rignore-0.5.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:907e0f6e22e0fc62b8dec36dcb68b1427acd5eef00627ea0eacff0887ca56ff9"}, - {file = "rignore-0.5.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ee964931cb6f241263756b8d203c30a54ceb88da0d5ba21f4e1d26a97bda4db1"}, - {file = "rignore-0.5.1-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:8b3210333ea3717284832afe0b057f3094e0b611c7a758e39c205228419a44ac"}, - {file = "rignore-0.5.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:66d0ddfe0981be8aa47d5b4d5f4562486e3decc6ce152f223c396a455b49f028"}, - {file = "rignore-0.5.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5944a628e9586d0c012b6654e4614fa380973189a922702df1a9c92a31730d39"}, - {file = "rignore-0.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9238096b7a7e22a05ea911ea2a1db702cbee0d54fa903b2d74bf5c4626ae096"}, - {file = "rignore-0.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f1fd4c6b040cbc1b1ca762d6b2afc0a6e8f8a100750703902a6ec5e898544cb6"}, - {file = "rignore-0.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96541458a22256d2001157109d65cd81b8a3ba024f2aa43c95c50cab02c9316f"}, - {file = "rignore-0.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:287fcfd281057ab3003477d521bf1c16befaaf19138ed78dd29b02158c75d9fe"}, - {file = "rignore-0.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86228748bafa61adfd43c21138f1167de764856831f20726c07939ded74e38ee"}, - {file = "rignore-0.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:604baaa1897625eb5cc0f3d4f9a9209977b244dc01efbf5b37db18379f15263a"}, - {file = "rignore-0.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:b241588975b961f536a7607bb73ad6f9c50c122437c4612d6c99fbac2d0683df"}, - {file = "rignore-0.5.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:937c8a65c66daa95064107ea9f91b6738d9b8be06b98ed75257e1124dc73078c"}, - {file = "rignore-0.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:d51f310a573d99ecd517c47995c44833c8119c0945fb254d00e9e1e559bdbdc1"}, - {file = "rignore-0.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:50032d3b933c2e06b32008039b9c156ecc7d776886f9bac787873ae05da3704c"}, - {file = "rignore-0.5.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d98c30dc678d7490023e85698edf1f663d152bc04c33c7cec8edff4569c2c47"}, - {file = "rignore-0.5.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3889f083e5441ae4cdb3a54368417f45d5adc376d1f12d8f50e1f93af53a2be4"}, - {file = "rignore-0.5.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8570a8ada18256cd18aaece471930e3ce1dd0ca9a6799b13e5e4fdbbe5af1bec"}, - {file = "rignore-0.5.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea292c888dd9e8a1703a45a9bcaefe4ce855457c9525e7e5e03e263d5e957c60"}, - {file = "rignore-0.5.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ea92b67713f22da15ddf8a5a67ed26dbfd26ec9df855d07c8981b61b2385a58e"}, - {file = "rignore-0.5.1-pp38-pypy38_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:fb0eee2c35e11acc1fa0a09c82820d79db5dbfd9a1dea9ff7ae99b9d3d54a614"}, - {file = "rignore-0.5.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:55dbad6789ca1f3e01df3eea22dd74d0abece32e78e55f0fd0a2afd41e45f4eb"}, - {file = "rignore-0.5.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d245035815d92a7c4b412386f01ddccc97f2bd3f1b98ebc04a5aabc670e2b4a0"}, - {file = "rignore-0.5.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:becf9b89941af31670854b7bbe710bce51c664aedfd762e062f8b921d35e49f9"}, - {file = "rignore-0.5.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd13ec210c18b544cc9bb432c3e5d5535e7bf8601f18875ba49de51c698a9216"}, - {file = "rignore-0.5.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f12818eeecf2be33e52c2a9c3a546951b0a4f7e2b0e7906044fc26232fd9ab"}, - {file = "rignore-0.5.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b198e9c18cd6c316b03ccf3040df00f71ca2cd864d17c37a1ddcc1f2a7f26d0"}, - {file = "rignore-0.5.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fdcc3ac804adc16cf9f0ffcf35bac25ee1118f01310dc99e361f853163127b2"}, - {file = "rignore-0.5.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2077583133bc3135f55a1f5027bf00063303d3f421a06ab1669d04653ad3e953"}, - {file = "rignore-0.5.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:67027c8505f0657c318ecc9a26aebcbc559188a245c99bab8995f8adaaee9a7a"}, - {file = "rignore-0.5.1-pp39-pypy39_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:b49ab8d2abd743440ef5c0ee35ac0d8467eac4ef2a8fc5b48f1e6375f114375d"}, - {file = "rignore-0.5.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:3c62af30b52873671d460e692f10ad5df8247b557e3e2de9a46df4a09b00837c"}, - {file = "rignore-0.5.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:47663b6b19d908d5edd3da3920a9f1ba9b0e2195d6d36e3889ec942a1d3d7249"}, - {file = "rignore-0.5.1.tar.gz", hash = "sha256:4f5bdedf02eaf94fc7550405ae2bcb75bdc6449ae1deb2dbea61c8a97186f7ae"}, + {file = "rignore-0.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a87091687678b3537012f26707641386f11b92e78da6a407af39193fd74a1d96"}, + {file = "rignore-0.6.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2eb003ac18a0269f727ec4ad5d8d5da1ac66a1c75a01f1fbea31b826c89346ee"}, + {file = "rignore-0.6.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cf62660a521b0f0b350205964aa20af6dc2d11a9ec694809714a09e005079b3"}, + {file = "rignore-0.6.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48ca296c0dec4a2eff7e38812434f01cdea49339fa09def9b31a8c85f35ffc0f"}, + {file = "rignore-0.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92c7224bdf715b24cc2166af01b8f1d79ad1af1bca1aa91310e5aa5933b41872"}, + {file = "rignore-0.6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:178503a244e0823e9be94f36d42b238c500f44580adc26c17f6b05abc0fbbbb6"}, + {file = "rignore-0.6.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:09265fab1b913e636d743602d325d49e4304a36476a9f14727188476fa99f221"}, + {file = "rignore-0.6.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:24fa6a3f85b97b81f122fd744dfbbff8c05b35b4bf968a77374f4e9123463e7d"}, + {file = "rignore-0.6.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:7306cec150c8942507a540fa8ff417962e8aaf327135929be8270a33b645f218"}, + {file = "rignore-0.6.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84f24acef49f61289c4ac51fbdb418bc394e54267b86723bd5802d2bd388bf05"}, + {file = "rignore-0.6.2-cp310-cp310-win32.whl", hash = "sha256:2fe22933bd498ec6bd16a9bdfd9fe42004b5b40d36b9dd0ff3bb45000a0a0761"}, + {file = "rignore-0.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:d91e1458c0c8142fc07ba1901d26c4413a4d0aa6f152eefd0dcab15e1a699c84"}, + {file = "rignore-0.6.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:20da9a861a95ef82beebfbc9201896bb04f66ba0d4a52d65b956037c70a60590"}, + {file = "rignore-0.6.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd03d343ec059258269aaa6b4c51aab878e2b2ff92bf62269010d2f7bd584ab4"}, + {file = "rignore-0.6.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29e7382c053eb62b916699ce6e4ccff335ecbcf14ce4c9d8786c096c236dd42d"}, + {file = "rignore-0.6.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a16c32b1845d41e4c39350c3392ed389053efd40659026e3aad927339e6cfb2c"}, + {file = "rignore-0.6.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8341122d2453867e793cd350412734f7d34d9ab4c6ce23062ea38450db46d758"}, + {file = "rignore-0.6.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d286840b255f750b3abe5ecb265b9dab93f18a002da4f500d8b0088b01ab9140"}, + {file = "rignore-0.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177c5ed48128a33d74c0c77bcf2d57e764ef1005f9ada63637b04075a9c75045"}, + {file = "rignore-0.6.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cb46444e2ed3cf340979967c6f83ebe3782d7e8882accb5cf0ef63d26c339c2a"}, + {file = "rignore-0.6.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1300c1b0827bb9bc0b343a9e4a42b73dfd2c2ded010b30ba13807f746e3e6f51"}, + {file = "rignore-0.6.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5dd7bce7f1feba0d828e34f63f5ab12b3f410590c0a55e3eec8658fa64cd7378"}, + {file = "rignore-0.6.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b0d7ace3b10d87a742e5665501c55978a593b6e0d510f6b53acc6b595923218a"}, + {file = "rignore-0.6.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aaf91280106c0c696148eeab83b1744caae7372d1f55570f82a6b7e480367b5e"}, + {file = "rignore-0.6.2-cp311-cp311-win32.whl", hash = "sha256:5dfee0390640d1b70c672e93e09a909088afd0f030098e46609e2ed6c72f735b"}, + {file = "rignore-0.6.2-cp311-cp311-win_amd64.whl", hash = "sha256:b56afc3ad3114e7f6e592c2aef75a40548073c086e96a2686423e0f038113027"}, + {file = "rignore-0.6.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:d71f5e48aa1e16a0d56d76ffac93831918c84539d59ee0949f903e8eef97c7ba"}, + {file = "rignore-0.6.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9ed1bfad40929b0922c127d4b812428b9283a3bb515b143c39ddb8e123caf764"}, + {file = "rignore-0.6.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd1ef10e348903209183cfa9639c78fcf48f3b97ec76f26df1f66d9e237aafa8"}, + {file = "rignore-0.6.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e91146dc5c3f04d57e8cda8fb72b132ee9b58402ecfd1387108f7b5c498b9584"}, + {file = "rignore-0.6.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e9230cd680325fa5a37bb482ce4e6f019856ee63c46b88272bb3f246e2b83f8"}, + {file = "rignore-0.6.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e5defb13c328c7e7ccebc8f0179eb5d6306acef1339caa5f17785c1272e29da"}, + {file = "rignore-0.6.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c269f543e922010e08ff48eaa0ff7dbf13f9f005f5f0e7a9a17afdac2d8c0e8"}, + {file = "rignore-0.6.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:71042fdbd57255c82b2b4070b7fac8f6a78cbc9f27d3a74523d2966e8619d661"}, + {file = "rignore-0.6.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:83fc16b20b67d09f3e958b2b1c1fa51fedc9e177c398227b32799cb365fd6fe9"}, + {file = "rignore-0.6.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3b2a8c5e22ba99bc995db4337b4c2f3422696ffb61d17fffc2bad3bb3d0ca3c4"}, + {file = "rignore-0.6.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b5c1955b697c7f8f3ab156bae43197b7f85f993dc6865842b36fd7d7f32b1626"}, + {file = "rignore-0.6.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9280867b233076afbe467a8626f4cbf688549ef16d3a8661bd59991994b4c7ad"}, + {file = "rignore-0.6.2-cp312-cp312-win32.whl", hash = "sha256:68926e2467f595272214e568e93b187362d455839e5e0368934125bc9a2fab60"}, + {file = "rignore-0.6.2-cp312-cp312-win_amd64.whl", hash = "sha256:170d32f6a6bc628c0e8bc53daf95743537a90a90ccd58d28738928846ac0c99a"}, + {file = "rignore-0.6.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:b50d5221ca6f869d7622c228988609b6f82ce9e0368de23bbef67ea23b0000e2"}, + {file = "rignore-0.6.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9f9d7e302e36a2fe9188c4e5553b66cf814a0ba416dbe2f824962eda0ff92e90"}, + {file = "rignore-0.6.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38c5bdd8bb1900ff529fbefa1e2ca3eeb669a2fafc5a81be8213fd028182d2cf"}, + {file = "rignore-0.6.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:819963993c25d26474a807d615d07ca4d61ca5876dbb4c058cc0adb09bf3a363"}, + {file = "rignore-0.6.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c7af68bf559f5b0ab8c575b0097db7fbf58558581d5e5f44dba27fcae388149"}, + {file = "rignore-0.6.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fbbfdd5efed90757112c8b2587a57868882858e94311a57b08bbc24482eb966"}, + {file = "rignore-0.6.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8cecfc7e406fdbbc0850dd8592e30f3fbb5f0ce485f7502ecb6ce432ad0af34"}, + {file = "rignore-0.6.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3165f07a8e95bbda8203d30105754b68c30002d00cc970fbe78a588957b787b7"}, + {file = "rignore-0.6.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3b2eb202a83ac6ca8eedc6aab17c76fd593ffa26fd3e3a3b8055f54f0d6254cf"}, + {file = "rignore-0.6.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3e639fe26d5457daaa7621bd67ad78035e4ca7af50a7c75dbd020b1f05661854"}, + {file = "rignore-0.6.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fe3887178401c48452984ea540a7984cb0db8dc0bca03f8dd86e2c90fa4c8e97"}, + {file = "rignore-0.6.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:17b15e6485b11dbba809836cca000fbaa6dd37305bbd35ef8b2d100f35fdb889"}, + {file = "rignore-0.6.2-cp313-cp313-win32.whl", hash = "sha256:0b1e5e1606659a7d448d78a199b11eec4d8088379fea43536bcdf869fd629389"}, + {file = "rignore-0.6.2-cp313-cp313-win_amd64.whl", hash = "sha256:2f454ebd5ce3a4c5454b78ff8df26ed7b9e9e7fca9d691bbcd8e8b5a09c2d386"}, + {file = "rignore-0.6.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:235972ac52d0e38be4bd81c5d4e07459af99ae2713ff5c6f7ec7593c18c7ef67"}, + {file = "rignore-0.6.2-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:763a1cac91430bad7c2ccaf6b032966448bbb44457a1915e7ad4765209928437"}, + {file = "rignore-0.6.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c345a1ec8f508db7d6918961318382a26bca68d315f2e71c7a93be4182eaa82c"}, + {file = "rignore-0.6.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d47b76d30e434052dbc54e408eb73341c7e702af78086e0f676f8afdcff9dc8"}, + {file = "rignore-0.6.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:206f1753fa0b2921fcba36eba8d280242e088b010b5263def8856c29d3eeef34"}, + {file = "rignore-0.6.2-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:8949da2148e1eb729a8ebc7725507a58a8bb0d0191eb7429c4cea2557945cfdd"}, + {file = "rignore-0.6.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:fd8dd54b0d0decace1d154d29fc09e7069b7c1d92c250fc3ca8ec1a148b26ab5"}, + {file = "rignore-0.6.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c7907763174c43b38525a490e2f9bc2b01534214e8af38f7737903e8fa195574"}, + {file = "rignore-0.6.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c27e1e93ece4296a593ff44d4200acf1b8212e13f0d2c3f4e1ac81e790015fd"}, + {file = "rignore-0.6.2-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2252d603550d529362c569b10401ab32536613517e7e1df0e4477fe65498245"}, + {file = "rignore-0.6.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:ba06c53e5aac7f0cfcfb60e18c84d2dacf3f0580651e67cf5b4908f0a3e3e92d"}, + {file = "rignore-0.6.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b1fa16c7631a5c14679f54e0b0fcf124d5bdaeb550ae2130fe5bf9205f13d073"}, + {file = "rignore-0.6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6fffb5d844762087d67f2014a2417d11585c0596b75dcaba90611dfcbf6f605"}, + {file = "rignore-0.6.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f91c1842220f3450db2c4a56f4836082633d1940be23f9485850326cd1c3ec33"}, + {file = "rignore-0.6.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e034f8701afb53d3d3223a3ad10ecfc7c7d1f5b313e5355b5d3151e51c43ce87"}, + {file = "rignore-0.6.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:11500184174fb477b7547c12412ee1dff041864f7ee1e88fcd8a3c223646766b"}, + {file = "rignore-0.6.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:739729cb0ed7a42684989219aeb33f951cb0ed9f62c3345ab89592befe9c4e6e"}, + {file = "rignore-0.6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ed1fcaba15c0872862dc6ef3012198bdf4ab01d2d31346a8547e4522251371a"}, + {file = "rignore-0.6.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a556775a8fd6142d39707bb7fbec0f95361288c099b43700813227988c4d07f7"}, + {file = "rignore-0.6.2-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:0e95c770035b8ec996cfc110b4f496f7dcebb1eac2908642f60be06de21ab57a"}, + {file = "rignore-0.6.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:edb2f839d18c5e07a6227cf4d3e665ae6fb8114235039613014f2f7ea2c841ed"}, + {file = "rignore-0.6.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6379149257d3251732e272bccc607238a1174f3912ba14e3068332b1b0d0cae9"}, + {file = "rignore-0.6.2-cp38-cp38-win32.whl", hash = "sha256:8267eeda42b5e907f2423b6f4298f64f27acc4adb768577a8c1130c5c80a167c"}, + {file = "rignore-0.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:6fddda6c5280b05755e93c6879c763e2b646bd1b0deeeabbe9c6bc05d4666c05"}, + {file = "rignore-0.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:208b18aa28855bb48f03b3e2571a61089b48ccaf3239c8df023a01af5d89dcac"}, + {file = "rignore-0.6.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:52c4476332568016df3fb4aea8fe29aeb22739652a0f1259257c05ee8e4d453b"}, + {file = "rignore-0.6.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51ad94352ce8c91a9d6472f56dc6980537b04700d380f7f9ef8d4b3090545b59"}, + {file = "rignore-0.6.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db11fb019a7695d9f0b5c02b8ddd9c7d74a517edf692138e6c76ee7503d2dbac"}, + {file = "rignore-0.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:704529e3d1f107f7a1a20f234a2c4f7d126bc64cf2effbacd4d5dce4271ce11c"}, + {file = "rignore-0.6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bbb9884db4b76ba1782164200481c62ad5236b07e2c818496d5864f5ac2cdbaf"}, + {file = "rignore-0.6.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fd7ad37ce8260925d3ce5cae4cd9ed96476468a6bb5f3277738555a8813efb0b"}, + {file = "rignore-0.6.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:63061107a0b97c97399b5e73fbbd40314849c5f24d7cc2b78858cf9e29223a1c"}, + {file = "rignore-0.6.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:97c75cbfb2e9dcfb2a1724a3df98078d646edebf4ad6b2672221b0f27893afaf"}, + {file = "rignore-0.6.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cab1fb76e42cfd17b37b4fc69a367f4a98d1724b01d6b569b90a66c18ca7fa07"}, + {file = "rignore-0.6.2-cp39-cp39-win32.whl", hash = "sha256:1be8c358e4a850a6fee8b05db55a8373c8e6ede9ce72e2c9345ad03065b5e1aa"}, + {file = "rignore-0.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:89b21a78d2ec205e3b0bcb29348894f58a7d22ae44806666cc1c1903c488b548"}, + {file = "rignore-0.6.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d434f4c114ca1c8fa1ae52e4ee9f5db525c76d8d6516e35f27e3e7aca60117a"}, + {file = "rignore-0.6.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:701f84035b2b9a42727a240118eedb9bdeebe5a887aa823587f5f9881cad1e7f"}, + {file = "rignore-0.6.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150e8d29ec2c9e3eb9c5fe92ec4e4d1f5c048ad3ae497f7aa62b63adde88ba6f"}, + {file = "rignore-0.6.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f896d3a44cb395c89317d4920a1af459f63d2c467edd5d46461446647850454e"}, + {file = "rignore-0.6.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:679ea98f5796579fadc32542f7a345c0bb22bc872d8d3f3901999c344037cf2f"}, + {file = "rignore-0.6.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:285816d7f469dd0e240fd1897de41ec6bad6a30a768d81422c85613ef367addc"}, + {file = "rignore-0.6.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a73660be1dd5eba7f6be8ad4f6726d429d438e2f15edbd30e1e2ee2fdd674630"}, + {file = "rignore-0.6.2-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:3a3c532cedb25114022582465d66958dd8c793e96e17677b8660dcfe8239e1d6"}, + {file = "rignore-0.6.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:bd26826ea6077101f7f25c2968fce20d3c8a01a7a18665ced682ce89e64c68ed"}, + {file = "rignore-0.6.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2071f1b70b348a25195149c5e2c09486649b4127390c54349272668a7d895314"}, + {file = "rignore-0.6.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee1cb4eb60624a8b4cf3931b907de184a0ef963b2d76e7eb2a63fdd177fbf368"}, + {file = "rignore-0.6.2-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:912319d741069fc371bb334f43bb541fa9dd825296956279d1b3544097945fc6"}, + {file = "rignore-0.6.2-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:618c3b01398b293320e401ce3eb70f9f191262a93d6414258e73e5e059efee3c"}, + {file = "rignore-0.6.2-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca6d5016b0862848d2bd1b2491ba50b2ded0e578d0c7faea6bb475831d6a076b"}, + {file = "rignore-0.6.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbc82beee24d5fc82ca3872461da3d2ceb371acbf2b154da87db82995d18c613"}, + {file = "rignore-0.6.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5a91270cd3506129fb22a60f88c177dc185f49c07cf65de57515be5851ae53b8"}, + {file = "rignore-0.6.2-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1e314f9e95ff9a6b303591c4d5307c7f9267cee28be88d83e2f76e0acf3c4288"}, + {file = "rignore-0.6.2-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:973794e2379b7b7bdb57d0862e5b49224d393bb6cc27455f423c768c8e84e2aa"}, + {file = "rignore-0.6.2-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8c362ff5067fb999e850be1db98a54b35791cea7aa2a037f7f9540383c617156"}, + {file = "rignore-0.6.2-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5c4ccfa785284e1be08e58f77445c6a98b2ec6bce87031dd091ee03c4b9e31c6"}, + {file = "rignore-0.6.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61beb81593bad4e28f105155b7080514e9b944bdde6a17167d5383405151732"}, + {file = "rignore-0.6.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:231a47c3cd527a86e3f32141ac1a3cb39699c228500d5ac79486802a572de9a6"}, + {file = "rignore-0.6.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50ce036fe2a9d6c7b6b756a18e8b62c9f2d5ab5aee24654cbdf55e9b38ebcbab"}, + {file = "rignore-0.6.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7770dc9b633bf5a005dd20ff479b50d4be643d6905fb553f510d9dc19f2e52ef"}, + {file = "rignore-0.6.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2695b9dbb44ba484f5e37cf4e7a42f357420bf24617b5325797475beeaba686d"}, + {file = "rignore-0.6.2-pp39-pypy39_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:d38ac7971370dd47f3d41f15fc73ca91377e28deac9ce2e02eaa9f6533003576"}, + {file = "rignore-0.6.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:714f7c582913f98ca3bcebf644820706e61ced4f3feddc35708050c3db02c973"}, + {file = "rignore-0.6.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:eb6381703a0b71f7ad44aa28463249a904f6a014f0598e5540b3d7d0fa5e23f5"}, + {file = "rignore-0.6.2.tar.gz", hash = "sha256:1fef5c83a18cbd2a45e2d568ad15c369e032170231fe7cd95e44e1c80fb65497"}, ] [[package]] @@ -3336,83 +3316,83 @@ files = [ [[package]] name = "xattr" -version = "1.1.4" +version = "1.2.0" description = "Python wrapper for extended filesystem attributes" optional = false python-versions = ">=3.8" groups = ["main"] markers = "sys_platform == \"darwin\"" files = [ - {file = "xattr-1.1.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:acb85b6249e9f3ea10cbb56df1021d43f4027212f0d004304bc9075dc7f54769"}, - {file = "xattr-1.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1a848ab125c0fafdc501ccd83b4c9018bba576a037a4ca5960a22f39e295552e"}, - {file = "xattr-1.1.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:467ee77471d26ae5187ee7081b82175b5ca56ead4b71467ec2e6119d1b08beed"}, - {file = "xattr-1.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fd35f46cb0154f7033f9d5d0960f226857acb0d1e0d71fd7af18ed84663007c"}, - {file = "xattr-1.1.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d956478e9bb98a1efd20ebc6e5703497c1d2d690d5a13c4df4abf59881eed50"}, - {file = "xattr-1.1.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f25dfdcd974b700fb04a40e14a664a80227ee58e02ea062ac241f0d7dc54b4e"}, - {file = "xattr-1.1.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:33b63365c1fcbc80a79f601575bac0d6921732e0245b776876f3db3fcfefe22d"}, - {file = "xattr-1.1.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:544542be95c9b49e211f0a463758f200de88ba6d5a94d3c4f42855a484341acd"}, - {file = "xattr-1.1.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac14c9893f3ea046784b7702be30889b200d31adcd2e6781a8a190b6423f9f2d"}, - {file = "xattr-1.1.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bb4bbe37ba95542081890dd34fa5347bef4651e276647adaa802d5d0d7d86452"}, - {file = "xattr-1.1.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3da489ecef798705f9a39ea8cea4ead0d1eeed55f92c345add89740bd930bab6"}, - {file = "xattr-1.1.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:798dd0cbe696635a6f74b06fc430818bf9c3b24314e1502eadf67027ab60c9b0"}, - {file = "xattr-1.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b2b6361626efad5eb5a6bf8172c6c67339e09397ee8140ec41258737bea9681"}, - {file = "xattr-1.1.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7fa20a0c9ce022d19123b1c5b848d00a68b837251835a7929fe041ee81dcd0"}, - {file = "xattr-1.1.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e20eeb08e2c57fc7e71f050b1cfae35cbb46105449853a582bf53fd23c5379e"}, - {file = "xattr-1.1.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:477370e75821bded901487e5e752cffe554d1bd3bd4839b627d4d1ee8c95a093"}, - {file = "xattr-1.1.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a8682091cd34a9f4a93c8aaea4101aae99f1506e24da00a3cc3dd2eca9566f21"}, - {file = "xattr-1.1.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2e079b3b1a274ba2121cf0da38bbe5c8d2fb1cc49ecbceb395ce20eb7d69556d"}, - {file = "xattr-1.1.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ae6579dea05bf9f335a082f711d5924a98da563cac72a2d550f5b940c401c0e9"}, - {file = "xattr-1.1.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cd6038ec9df2e67af23c212693751481d5f7e858156924f14340376c48ed9ac7"}, - {file = "xattr-1.1.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:608b2877526674eb15df4150ef4b70b7b292ae00e65aecaae2f192af224be200"}, - {file = "xattr-1.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c54dad1a6a998c6a23edfd25e99f4d38e9b942d54e518570044edf8c767687ea"}, - {file = "xattr-1.1.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c0dab6ff72bb2b508f3850c368f8e53bd706585012676e1f71debba3310acde8"}, - {file = "xattr-1.1.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a3c54c6af7cf09432b2c461af257d5f4b1cb2d59eee045f91bacef44421a46d"}, - {file = "xattr-1.1.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e346e05a158d554639fbf7a0db169dc693c2d2260c7acb3239448f1ff4a9d67f"}, - {file = "xattr-1.1.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3ff6d9e2103d0d6e5fcd65b85a2005b66ea81c0720a37036445faadc5bbfa424"}, - {file = "xattr-1.1.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7a2ee4563c6414dfec0d1ac610f59d39d5220531ae06373eeb1a06ee37cd193f"}, - {file = "xattr-1.1.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:878df1b38cfdadf3184ad8c7b0f516311128d5597b60ac0b3486948953658a83"}, - {file = "xattr-1.1.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0c9b8350244a1c5454f93a8d572628ff71d7e2fc2f7480dcf4c4f0e8af3150fe"}, - {file = "xattr-1.1.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a46bf48fb662b8bd745b78bef1074a1e08f41a531168de62b5d7bd331dadb11a"}, - {file = "xattr-1.1.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83fc3c07b583777b1dda6355329f75ca6b7179fe0d1002f1afe0ef96f7e3b5de"}, - {file = "xattr-1.1.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6308b19cff71441513258699f0538394fad5d66e1d324635207a97cb076fd439"}, - {file = "xattr-1.1.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48c00ddc15ddadc9c729cd9504dabf50adb3d9c28f647d4ac9a3df45a046b1a0"}, - {file = "xattr-1.1.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a06136196f26293758e1b244200b73156a0274af9a7349fa201c71c7af3bb9e8"}, - {file = "xattr-1.1.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8fc2631a3c6cfcdc71f7f0f847461839963754e76a2015de71e7e71e3304abc0"}, - {file = "xattr-1.1.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d6e1e835f9c938d129dd45e7eb52ebf7d2d6816323dab93ce311bf331f7d2328"}, - {file = "xattr-1.1.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:60dea2d369a6484e8b7136224fc2971e10e2c46340d83ab780924afe78c90066"}, - {file = "xattr-1.1.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:85c2b778b09d919523f80f244d799a142302582d76da18903dc693207c4020b0"}, - {file = "xattr-1.1.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ee0abba9e1b890d39141714ff43e9666864ca635ea8a5a2194d989e6b17fe862"}, - {file = "xattr-1.1.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e4174ba7f51f46b95ea7918d907c91cd579575d59e6a2f22ca36a0551026737"}, - {file = "xattr-1.1.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2b05e52e99d82d87528c54c2c5c8c5fb0ba435f85ac6545511aeea136e49925"}, - {file = "xattr-1.1.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a3696fad746be37de34eb73c60ea67144162bd08106a5308a90ce9dea9a3287"}, - {file = "xattr-1.1.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a3a7149439a26b68904c14fdc4587cde4ac7d80303e9ff0fefcfd893b698c976"}, - {file = "xattr-1.1.4-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:507b36a126ce900dbfa35d4e2c2db92570c933294cba5d161ecd6a89f7b52f43"}, - {file = "xattr-1.1.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:9392b417b54923e031041940d396b1d709df1d3779c6744454e1f1c1f4dad4f5"}, - {file = "xattr-1.1.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e9f00315e6c02943893b77f544776b49c756ac76960bea7cb8d7e1b96aefc284"}, - {file = "xattr-1.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c8f98775065260140efb348b1ff8d50fd66ddcbf0c685b76eb1e87b380aaffb3"}, - {file = "xattr-1.1.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b471c6a515f434a167ca16c5c15ff34ee42d11956baa749173a8a4e385ff23e7"}, - {file = "xattr-1.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee0763a1b7ceb78ba2f78bee5f30d1551dc26daafcce4ac125115fa1def20519"}, - {file = "xattr-1.1.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:099e6e9ce7999b403d36d9cf943105a3d25d8233486b54ec9d1b78623b050433"}, - {file = "xattr-1.1.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3e56faef9dde8d969f0d646fb6171883693f88ae39163ecd919ec707fbafa85"}, - {file = "xattr-1.1.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:328156d4e594c9ae63e1072503c168849e601a153ad37f0290743544332d6b6f"}, - {file = "xattr-1.1.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a57a55a27c7864d6916344c9a91776afda6c3b8b2209f8a69b79cdba93fbe128"}, - {file = "xattr-1.1.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3c19cdde08b040df1e99d2500bf8a9cff775ab0e6fa162bf8afe6d84aa93ed04"}, - {file = "xattr-1.1.4-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7c72667f19d3a9acf324aed97f58861d398d87e42314731e7c6ab3ac7850c971"}, - {file = "xattr-1.1.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:67ae934d75ea2563fc48a27c5945749575c74a6de19fdd38390917ddcb0e4f24"}, - {file = "xattr-1.1.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a1b0c348dd8523554dc535540d2046c0c8a535bb086561d8359f3667967b6ca"}, - {file = "xattr-1.1.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22284255d2a8e8f3da195bd8e8d43ce674dbc7c38d38cb6ecfb37fae7755d31f"}, - {file = "xattr-1.1.4-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b38aac5ef4381c26d3ce147ca98fba5a78b1e5bcd6be6755b4908659f2705c6d"}, - {file = "xattr-1.1.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:803f864af528f6f763a5be1e7b1ccab418e55ae0e4abc8bda961d162f850c991"}, - {file = "xattr-1.1.4-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:40354ebfb5cecd60a5fbb9833a8a452d147486b0ffec547823658556625d98b5"}, - {file = "xattr-1.1.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2abaf5d06be3361bfa8e0db2ee123ba8e92beab5bceed5e9d7847f2145a32e04"}, - {file = "xattr-1.1.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e638e5ffedc3565242b5fa3296899d35161bad771f88d66277b58f03a1ba9fe"}, - {file = "xattr-1.1.4-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0597e919d116ec39997804288d77bec3777228368efc0f2294b84a527fc4f9c2"}, - {file = "xattr-1.1.4-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3cee9455c501d19f065527afda974418b3ef7c61e85d9519d122cd6eb3cb7a00"}, - {file = "xattr-1.1.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:89ed62ce430f5789e15cfc1ccabc172fd8b349c3a17c52d9e6c64ecedf08c265"}, - {file = "xattr-1.1.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e25b824f4b9259cd8bb6e83c4873cf8bf080f6e4fa034a02fe778e07aba8d345"}, - {file = "xattr-1.1.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8fba66faa0016dfc0af3dd7ac5782b5786a1dfb851f9f3455e266f94c2a05a04"}, - {file = "xattr-1.1.4-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ec4b0c3e0a7bcd103f3cf31dd40c349940b2d4223ce43d384a3548992138ef1"}, - {file = "xattr-1.1.4.tar.gz", hash = "sha256:b7b02ecb2270da5b7e7deaeea8f8b528c17368401c2b9d5f63e91f545b45d372"}, + {file = "xattr-1.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3df4d8d91e2996c3c72a390ec82e8544acdcb6c7df67b954f1736ff37ea4293e"}, + {file = "xattr-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f5eec248976bbfa6c23df25d4995413df57dccf4161f6cbae36f643e99dbc397"}, + {file = "xattr-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fafecfdedf7e8d455443bec2c3edab8a93d64672619cd1a4ee043a806152e19c"}, + {file = "xattr-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c229e245c6c9a85d2fd7d07531498f837dd34670e556b552f73350f11edf000c"}, + {file = "xattr-1.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:376631e2383918fbc3dc9bcaeb9a533e319322d2cff1c119635849edf74e1126"}, + {file = "xattr-1.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbae24ab22afe078d549645501ecacaa17229e0b7769c8418fad69b51ad37c9"}, + {file = "xattr-1.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a161160211081d765ac41fa056f4f9b1051f027f08188730fbc9782d0dce623e"}, + {file = "xattr-1.2.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a542acf6c4e8221664b51b35e0160c44bd0ed1f2fd80019476f7698f4911e560"}, + {file = "xattr-1.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:034f075fc5a9391a1597a6c9a21cb57b688680f0f18ecf73b2efc22b8d330cff"}, + {file = "xattr-1.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:00c26c14c90058338993bb2d3e1cebf562e94ec516cafba64a8f34f74b9d18b4"}, + {file = "xattr-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b4f43dc644db87d5eb9484a9518c34a864cb2e588db34cffc42139bf55302a1c"}, + {file = "xattr-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c7602583fc643ca76576498e2319c7cef0b72aef1936701678589da6371b731b"}, + {file = "xattr-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90c3ad4a9205cceb64ec54616aa90aa42d140c8ae3b9710a0aaa2843a6f1aca7"}, + {file = "xattr-1.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83d87cfe19cd606fc0709d45a4d6efc276900797deced99e239566926a5afedf"}, + {file = "xattr-1.2.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c67dabd9ddc04ead63fbc85aed459c9afcc24abfc5bb3217fff7ec9a466faacb"}, + {file = "xattr-1.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9a18ee82d8ba2c17f1e8414bfeb421fa763e0fb4acbc1e124988ca1584ad32d5"}, + {file = "xattr-1.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:38de598c47b85185e745986a061094d2e706e9c2d9022210d2c738066990fe91"}, + {file = "xattr-1.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:15e754e854bdaac366ad3f1c8fbf77f6668e8858266b4246e8c5f487eeaf1179"}, + {file = "xattr-1.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:daff0c1f5c5e4eaf758c56259c4f72631fa9619875e7a25554b6077dc73da964"}, + {file = "xattr-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:109b11fb3f73a0d4e199962f11230ab5f462e85a8021874f96c1732aa61148d5"}, + {file = "xattr-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7c7c12968ce0bf798d8ba90194cef65de768bee9f51a684e022c74cab4218305"}, + {file = "xattr-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37989dabf25ff18773e4aaeebcb65604b9528f8645f43e02bebaa363e3ae958"}, + {file = "xattr-1.2.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:165de92b0f2adafb336f936931d044619b9840e35ba01079f4dd288747b73714"}, + {file = "xattr-1.2.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82191c006ae4c609b22b9aea5f38f68fff022dc6884c4c0e1dba329effd4b288"}, + {file = "xattr-1.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2b2e9c87dc643b09d86befad218e921f6e65b59a4668d6262b85308de5dbd1dd"}, + {file = "xattr-1.2.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:14edd5d47d0bb92b23222c0bb6379abbddab01fb776b2170758e666035ecf3aa"}, + {file = "xattr-1.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:12183d5eb104d4da787638c7dadf63b718472d92fec6dbe12994ea5d094d7863"}, + {file = "xattr-1.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c385ea93a18aeb6443a719eb6a6b1d7f7b143a4d1f2b08bc4fadfc429209e629"}, + {file = "xattr-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2d39d7b36842c67ab3040bead7eb6d601e35fa0d6214ed20a43df4ec30b6f9f9"}, + {file = "xattr-1.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:320ef856bb817f4c40213b6de956dc440d0f23cdc62da3ea02239eb5147093f8"}, + {file = "xattr-1.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26d306bfb3b5641726f2ee0da6f63a2656aa7fdcfd15de61c476e3ca6bc3277e"}, + {file = "xattr-1.2.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c67e70d5d8136d328ad13f85b887ffa97690422f1a11fb29ab2f702cf66e825a"}, + {file = "xattr-1.2.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8904d3539afe1a84fc0b7f02fa91da60d2505adf2d5951dc855bf9e75fe322b2"}, + {file = "xattr-1.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2520516c1d058895eae00b2b2f10833514caea6dc6802eef1e431c474b5317ad"}, + {file = "xattr-1.2.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:29d06abbef4024b7469fcd0d4ade6d2290582350a4df95fcc48fa48b2e83246b"}, + {file = "xattr-1.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:093c75f7d9190be355b8e86da3f460b9bfe3d6a176f92852d44dcc3289aa10dc"}, + {file = "xattr-1.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ee3901db48de913dcef004c5d7b477a1f4aadff997445ef62907b10fdad57de"}, + {file = "xattr-1.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b837898a5225c7f7df731783cd78bae2ed81b84bacf020821f1cd2ab2d74de58"}, + {file = "xattr-1.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cedc281811e424ecf6a14208532f7ac646866f91f88e8eadd00d8fe535e505fd"}, + {file = "xattr-1.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf60577caa248f539e4e646090b10d6ad1f54189de9a7f1854c23fdef28f574e"}, + {file = "xattr-1.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:363724f33510d2e7c7e080b389271a1241cb4929a1d9294f89721152b4410972"}, + {file = "xattr-1.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97db00596865845efb72f3d565a1f82b01006c5bf5a87d8854a6afac43502593"}, + {file = "xattr-1.2.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0b199ba31078f3e4181578595cd60400ee055b4399672169ceee846d33ff26de"}, + {file = "xattr-1.2.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b19472dc38150ac09a478c71092738d86882bc9ff687a4a8f7d1a25abce20b5e"}, + {file = "xattr-1.2.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:79f7823b30ed557e0e7ffd9a6b1a821a22f485f5347e54b8d24c4a34b7545ba4"}, + {file = "xattr-1.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eee258f5774933cb972cff5c3388166374e678980d2a1f417d7d6f61d9ae172"}, + {file = "xattr-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2a9de621eadf0466c391363bd6ed903b1a1bcd272422b5183fd06ef79d05347b"}, + {file = "xattr-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bc714f236f17c57c510ae9ada9962d8e4efc9f9ea91504e2c6a09008f3918ddf"}, + {file = "xattr-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:545e0ad3f706724029efd23dec58fb358422ae68ab4b560b712aedeaf40446a0"}, + {file = "xattr-1.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:200bb3cdba057cb721b727607bc340a74c28274f4a628a26011f574860f5846b"}, + {file = "xattr-1.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b0b27c889cc9ff0dba62ac8a2eef98f4911c1621e4e8c409d5beb224c4c227c"}, + {file = "xattr-1.2.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ea7cf8afd717853ad78eba8ca83ff66a53484ba2bb2a4283462bc5c767518174"}, + {file = "xattr-1.2.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:02fa813db054bbb7a61c570ae025bd01c36fc20727b40f49031feb930234bc72"}, + {file = "xattr-1.2.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2827e23d7a1a20f31162c47ab4bd341a31e83421121978c4ab2aad5cd79ea82b"}, + {file = "xattr-1.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:29ae44247d46e63671311bf7e700826a97921278e2c0c04c2d11741888db41b8"}, + {file = "xattr-1.2.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:629c42c1dd813442d90f281f69b88ef0c9625f604989bef8411428671f70f43e"}, + {file = "xattr-1.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:549f8fbda5da48cafc81ba6ab7bb8e8e14c4b0748c37963dc504bcae505474b7"}, + {file = "xattr-1.2.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa83e677b5f92a3c5c86eaf875e9d3abbc43887ff1767178def865fa9f12a3a0"}, + {file = "xattr-1.2.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb669f01627962ce2bc556f19d421162247bc2cad0d4625d6ea5eb32af4cf29b"}, + {file = "xattr-1.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:212156aa5fb987a53211606bc09e6fea3eda3855af9f2940e40df5a2a592425a"}, + {file = "xattr-1.2.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:7dc4fa9448a513077c5ccd1ce428ff0682cdddfc71301dbbe4ee385c74517f73"}, + {file = "xattr-1.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e4b93f2e74793b61c0a7b7bdef4a3813930df9c01eda72fad706b8db7658bc2"}, + {file = "xattr-1.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dddd5f6d0bb95b099d6a3888c248bf246525647ccb8cf9e8f0fc3952e012d6fb"}, + {file = "xattr-1.2.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68fbdffebe8c398a82c84ecf5e6f6a3adde9364f891cba066e58352af404a45c"}, + {file = "xattr-1.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c9ee84de7cd4a6d61b0b79e2f58a6bdb13b03dbad948489ebb0b73a95caee7ae"}, + {file = "xattr-1.2.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5594fcbc38fdbb3af16a8ad18c37c81c8814955f0d636be857a67850cd556490"}, + {file = "xattr-1.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:017aac8005e1e84d5efa4b86c0896c6eb96f2331732d388600a5b999166fec1c"}, + {file = "xattr-1.2.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d27a64f695440450c119ae4bc8f54b0b726a812ebea1666fff3873236936f36"}, + {file = "xattr-1.2.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f7e7067e1a400ad4485536a9e84c3330373086b2324fafa26d07527eeb4b175"}, + {file = "xattr-1.2.0.tar.gz", hash = "sha256:a64c8e21eff1be143accf80fd3b8fde3e28a478c37da298742af647ac3e5e0a7"}, ] [package.dependencies] diff --git a/SRV/services/arp_service.py b/SRV/services/arp_service.py index 15f564b..d428913 100644 --- a/SRV/services/arp_service.py +++ b/SRV/services/arp_service.py @@ -13,7 +13,7 @@ class NetworkScanner: вывода информации о клиентах. """ - def __init__(self, interface=None, translations: Translations = Depends(get_translations("services"))): + def __init__(self, interface=None, translations: Translations = Depends(get_translations())): """Инициализация параметров сетевого сканера. Args: diff --git a/SRV/services/auth_service.py b/SRV/services/auth_service.py index c368e83..2f3182e 100644 --- a/SRV/services/auth_service.py +++ b/SRV/services/auth_service.py @@ -30,7 +30,7 @@ oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/auth/login") class AuthService: """Сервис для регистрации, авторизации и управления сессиями""" - def __init__(self, translations: Translations = Depends(get_translations("services"))): + def __init__(self, translations: Translations = Depends(get_translations())): self.storage = JsonStorage() self.session_storage = SessionStorage() self.translations = translations diff --git a/SRV/services/connect_service.py b/SRV/services/connect_service.py index 90b0621..cbcb66d 100644 --- a/SRV/services/connect_service.py +++ b/SRV/services/connect_service.py @@ -14,7 +14,7 @@ class WifiConnectionService: Предоставляет методы для подключения, отключения и проверки статуса Wi-Fi соединений. """ - def __init__(self, translations: Translations = Depends(get_translations("services"))): + def __init__(self, translations: Translations = Depends(get_translations())): """Инициализирует сервис Wi-Fi. Автоматически определяет доступный Wi-Fi-интерфейс и сохраняет его имя. diff --git a/SRV/services/ip_service.py b/SRV/services/ip_service.py index bff8c4f..ad5c40f 100644 --- a/SRV/services/ip_service.py +++ b/SRV/services/ip_service.py @@ -8,7 +8,7 @@ from sdbus_async.networkmanager import ( import sdbus from sdbus_async.networkmanager.settings import ConnectionProfile from services.arp_service import NetworkScanner -from utils.i18n import get_translations, _ +from utils.i18n import get_translations from babel.support import Translations from fastapi import Depends @@ -19,7 +19,7 @@ class IPService: ARP-сканирования и применения настроек через NetworkManager. """ - def __init__(self, translations: Translations = Depends(get_translations("services"))): + def __init__(self): """Инициализирует сервис IP. Создаёт объект ARP-сканера и устанавливает системную шину D-Bus как @@ -28,7 +28,6 @@ class IPService: self.arp_scanner = NetworkScanner() self.bus = sdbus.sd_bus_open_system() sdbus.set_default_bus(self.bus) - self.translations = translations def _reset_bus(self): """Перезапускает соединение с системной шиной D-Bus. @@ -42,7 +41,7 @@ class IPService: self.bus = None self.bus = new_bus - async def check_ip_config(self, args: Dict[str, Any]) -> Dict[str, Any]: + async def check_ip_config(self, args: Dict[str, Any], translations: Translations = Depends(get_translations())) -> Dict[str, Any]: """Проверяет доступность IP-адреса перед его применением. Выполняет ARP-сканирование сети для проверки, занят ли указанный IP-адрес. @@ -51,6 +50,7 @@ class IPService: Args: args (Dict[str, Any]): Словарь с данными, включая "ipv4_updates" с полем "ipv4.address-data" для нового IP-адреса. + translations (Translations): Объект переводов. Returns: Dict[str, Any]: Словарь с ключами: @@ -66,14 +66,14 @@ class IPService: if any(client["ip"] == new_ip for client in clients): return { "available": False, - "message": self.translations.gettext("IP-адрес {ip} уже занят.").format(ip=new_ip) + "message": translations.gettext("IP-адрес {ip} уже занят.").format(ip=new_ip) } return { "available": True, - "message": self.translations.gettext("Настройки сетевого профиля доступны для использования.") + "message": translations.gettext("Настройки сетевого профиля доступны для использования.") } - async def apply_ip_config(self, args: Dict[str, Any]) -> None: + async def apply_ip_config(self, args: Dict[str, Any], translations: Translations = Depends(get_translations())) -> None: """Применяет проверенные настройки IP к указанному соединению. Перезапускает шину D-Bus, обновляет настройки соединения через NetworkManager, @@ -83,6 +83,7 @@ class IPService: args (Dict[str, Any]): Словарь с данными, включая: - "connection_id" (str): Идентификатор соединения. - "ipv4_updates" (Dict): Обновления настроек IPv4. + translations (Translations): Объект переводов. Raises: ValueError: Если соединение с указанным ID не найдено. @@ -98,7 +99,7 @@ class IPService: args["connection_id"]) if not connection_paths: - raise ValueError(self.translations.gettext("Подключение {connection_id} не найдено").format(connection_id=args["connection_id"])) + raise ValueError(translations.gettext("Подключение {connection_id} не найдено").format(connection_id=args["connection_id"])) connection = NetworkConnectionSettings(connection_paths[0]) profile = await connection.get_profile() @@ -126,4 +127,4 @@ class IPService: print(f"Reconnected to {args['connection_id']}") return - raise RuntimeError(self.translations.gettext("Устройство для интерфейса {interface} не найдено").format(interface=interface_name)) \ No newline at end of file + raise RuntimeError(translations.gettext("Устройство для интерфейса {interface} не найдено").format(interface=interface_name)) \ No newline at end of file diff --git a/SRV/services/network_service.py b/SRV/services/network_service.py index b9424ae..c4b006a 100644 --- a/SRV/services/network_service.py +++ b/SRV/services/network_service.py @@ -31,7 +31,7 @@ class NetworkService: их конфигурациях IP, Wi-Fi и состояниях. """ - def __init__(self, translations: Translations = Depends(get_translations("services"))): + def __init__(self, translations: Translations = Depends(get_translations())): """Инициализирует сервис NetworkManager. Устанавливает системный D-Bus и создаёт объекты для взаимодействия с diff --git a/SRV/services/settings_service.py b/SRV/services/settings_service.py index 4fb7a09..227d89c 100644 --- a/SRV/services/settings_service.py +++ b/SRV/services/settings_service.py @@ -10,7 +10,7 @@ logger = logging.getLogger(__name__) class SettingsService: """Сервис для управления настройками и очистки данных сети.""" - def __init__(self, translations: Translations = Depends(get_translations("services"))): + def __init__(self, translations: Translations = Depends(get_translations())): self.subnet_file = "storage/devices/devices.json" self.wifi_file = "storage/wifi/wifi.json" self.translations = translations diff --git a/SRV/services/subnet_service.py b/SRV/services/subnet_service.py index 0dd85e4..72f6159 100644 --- a/SRV/services/subnet_service.py +++ b/SRV/services/subnet_service.py @@ -29,7 +29,7 @@ logger = logging.getLogger(__name__) class NetworkScanner: """Класс для сканирования подсети с использованием ARP-запросов.""" - def __init__(self, interface: str, translations: Translations = Depends(get_translations("services"))): + def __init__(self, interface: str, translations: Translations = Depends(get_translations())): self.interface = interface conf.iface = interface self.translations = translations @@ -47,7 +47,7 @@ class NetworkScanner: class PortScanner: """Класс для сканирования открытых портов на устройствах.""" - def __init__(self, interface: str, translations: Translations = Depends(get_translations("services"))): + def __init__(self, interface: str, translations: Translations = Depends(get_translations())): self.interface = interface self.translations = translations @@ -56,7 +56,7 @@ class PortScanner: class DeviceInfoCollector: """Класс для сбора информации об устройствах, включая вендоров и хостнеймы.""" - def __init__(self, translations: Translations = Depends(get_translations("services"))): + def __init__(self, translations: Translations = Depends(get_translations())): self.mac_lookup = MacLookup() self.nbtscan_cache = {} self.nbtscan_results = {} @@ -119,7 +119,7 @@ class DeviceInfoCollector: class DeviceStorage: """Класс для хранения и управления данными об устройствах.""" - def __init__(self, storage_path: str = "storage/devices/devices.json", translations: Translations = Depends(get_translations("services"))): + def __init__(self, storage_path: str = "storage/devices/devices.json", translations: Translations = Depends(get_translations())): self.storage_file = Path(storage_path) self.storage_file.parent.mkdir(parents=True, exist_ok=True) self.offline_timeout = timedelta(days=7) @@ -180,7 +180,7 @@ class DeviceStorage: class SubnetService: """Сервис для сканирования подсетей и управления устройствами.""" - def __init__(self, translations: Translations = Depends(get_translations("services"))): + def __init__(self, translations: Translations = Depends(get_translations())): self.interface = self._get_default_interface() self.network_scanner = NetworkScanner(self.interface) self.port_scanner = PortScanner(self.interface) diff --git a/SRV/services/wifi_service.py b/SRV/services/wifi_service.py index e399fe6..dc8f800 100644 --- a/SRV/services/wifi_service.py +++ b/SRV/services/wifi_service.py @@ -22,7 +22,7 @@ logger = logging.getLogger(__name__) class WifiStorage: """Класс для хранения данных о Wi-Fi сетях и их заметках по SSID.""" - def __init__(self, storage_path: str = "storage/wifi/wifi.json", translations: Translations = Depends(get_translations("services"))): + def __init__(self, storage_path: str = "storage/wifi/wifi.json", translations: Translations = Depends(get_translations())): self.storage_file = Path(storage_path) self.storage_file.parent.mkdir(parents=True, exist_ok=True) self.translations = translations @@ -62,7 +62,7 @@ class WifiStorage: class WifiService: """Сервис для сканирования текущих Wi-Fi точек доступа.""" - def __init__(self, translations: Translations = Depends(get_translations("services"))): + def __init__(self, translations: Translations = Depends(get_translations())): self.mac_lookup = MacLookup() self.wifi = pywifi.PyWiFi() self.interface = self._get_wifi_interface() diff --git a/SRV/utils/i18n.py b/SRV/utils/i18n.py index 39fbdf1..65ece59 100644 --- a/SRV/utils/i18n.py +++ b/SRV/utils/i18n.py @@ -4,19 +4,11 @@ import logging logger = logging.getLogger(__name__) - -def get_translations(domain: str = "api_v1") -> callable: +def get_translations() -> callable: """ Создаёт зависимость для загрузки переводов на основе заголовка Accept-Language или параметра запроса 'locale'. По умолчанию используется русский язык. - - Args: - domain (str): Домен переводов (например, 'api_v1', 'services'). По умолчанию 'api_v1'. - - Returns: - callable: Функция, возвращающая объект Translations для указанной локали и домена. """ - def translations_dependency(request: Request) -> Translations: # Проверяем параметр запроса 'locale', если он есть locale = request.query_params.get("locale") @@ -27,28 +19,28 @@ def get_translations(domain: str = "api_v1") -> callable: # Если куки нет, используем заголовок Accept-Language locale = request.headers.get("Accept-Language", "ru").split(",")[0].split("-")[0] + logger.debug(f"Determined locale: {locale}") try: - translations = Translations.load("locales", [locale], domain) + translations = Translations.load("locales", [locale], "messages") if not translations._catalog: - logger.warning(f"Translations for locale {locale} and domain {domain} not found, falling back to ru") - translations = Translations.load("locales", ["ru"], domain) - logger.debug(f"Loaded translations for locale {locale} and domain {domain}") + logger.warning(f"Translations for locale {locale} not found, falling back to ru") + translations = Translations.load("locales", ["ru"], "messages") + logger.debug(f"Loaded translations for locale {locale}, catalog size: {len(translations._catalog)}") return translations except Exception as e: - logger.error(f"Failed to load translations for locale {locale} and domain {domain}: {str(e)}") + logger.error(f"Failed to load translations for locale {locale}: {str(e)}") # Fallback на русский - return Translations.load("locales", ["ru"], domain) + logger.debug("Falling back to ru translations") + return Translations.load("locales", ["ru"], "messages") return translations_dependency - -def _(msgid: str, domain: str = "api_v1", request: Request = None) -> str: +def _(msgid: str, request: Request = None) -> str: """ - Переводит строку msgid для указанного домена и текущей локали. + Переводит строку msgid для текущей локали. Args: msgid (str): Строка для перевода. - domain (str): Домен переводов (например, 'api_v1', 'services'). По умолчанию 'api_v1'. request (Request, optional): Объект запроса FastAPI для получения локали. Returns: @@ -56,7 +48,9 @@ def _(msgid: str, domain: str = "api_v1", request: Request = None) -> str: """ if request is None: # Язык, который будет отображаться по умолчанию - translations = Translations.load("locales", ["ru"], domain) + translations = Translations.load("locales", ["ru"], "messages") + logger.debug(f"Using default ru translations for msgid: {msgid}") else: - translations = get_translations(domain)(request) + translations = get_translations()(request) + logger.debug(f"Using translations for locale {request.cookies.get('locale', 'ru')} for msgid: {msgid}") return translations.gettext(msgid) \ No newline at end of file