Рефакторинг. docstring

This commit is contained in:
parent 060f4de175
commit 37f9e3abfb
14 changed files with 1234 additions and 243 deletions

View file

@ -12,27 +12,57 @@ router = APIRouter()
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class WebSocketManager:
"""
Класс для управления подключениями к WebSocket-серверу
"""Класс для управления подключениями к WebSocket-серверу.
Обрабатывает подключение, отключение и трансляцию сообщений для клиентов,
подключённых через WebSocket.
"""
def __init__(self):
"""Инициализация менеджера подключений к WebSocket-серверу"""
"""Инициализирует менеджер подключений к WebSocket-серверу.
Создаёт пустое множество для хранения активных соединений.
"""
self.active_connections: Set[WebSocket] = set()
async def connect(self, websocket: WebSocket):
"""Подключение клиента к WebSocket-серверу"""
"""Подключает клиента к WebSocket-серверу.
Принимает подключение и добавляет WebSocket в список активных соединений.
Args:
websocket (WebSocket): Объект WebSocket для подключения.
Raises:
Exception: Если произошла ошибка при принятии подключения.
"""
await websocket.accept()
self.active_connections.add(websocket)
def disconnect(self, websocket: WebSocket):
"""Отключение клиента от WebSocket-серверу"""
"""Отключает клиента от WebSocket-серверу.
Удаляет WebSocket из списка активных соединений.
Args:
websocket (WebSocket): Объект WebSocket для отключения.
"""
self.active_connections.remove(websocket)
async def broadcast(self, message: dict):
"""Трансляция сообщений всем подключенным клиентам"""
"""Транслирует сообщения всем подключённым клиентам.
Отправляет JSON-данные всем активным соединениям, обрабатывая
отключения клиентов.
Args:
message (dict): Сообщение для трансляции в формате JSON.
Raises:
WebSocketDisconnect: Если клиент неожиданно отключился.
Exception: Если произошла другая ошибка при отправке.
"""
for connection in list(self.active_connections):
try:
if connection.client_state == WebSocketState.CONNECTED:
@ -49,15 +79,25 @@ manager = WebSocketManager()
@router.websocket("/api/v1")
async def websocket_endpoint(websocket: WebSocket):
"""Обработчик WebSocket-соединения"""
"""Обработчик WebSocket-соединения.
Управляет соединением клиента, принимает данные для обновления позиций
контейнеров и транслирует сетевые данные.
Args:
websocket (WebSocket): Объект WebSocket для обработки соединения.
Raises:
WebSocketDisconnect: Если клиент отключился.
Exception: Если произошла ошибка при обработке данных.
"""
await manager.connect(websocket)
try:
while True:
data = await websocket.receive_json()
logger.info(f"Полученные данные: {data}")
if all(key in data
for key in ["container_id", "container_x", "container_y"]):
if all(key in data for key in ["container_id", "container_x", "container_y"]):
await update_container_position(data)
network_data = await get_network_data()
@ -77,12 +117,25 @@ async def websocket_endpoint(websocket: WebSocket):
@router.on_event("startup")
async def startup_event():
"""Запуск таска для трансляции сетевых данных"""
"""Запуск таска для трансляции сетевых данных при старте приложения.
Создаёт асинхронную задачу для периодической трансляции данных.
Raises:
Exception: Если произошла ошибка при запуске таска.
"""
asyncio.create_task(broadcast_data())
async def broadcast_data():
"""Таск для трансляции сетевых данных"""
"""Таск для периодической трансляции сетевых данных.
Выполняет сканирование сети и отправляет данные всем подключённым клиентам
с интервалом в 2 секунды.
Raises:
Exception: Если произошла ошибка при получении данных или трансляции.
"""
while True:
try:
network_data = await get_network_data()
@ -96,4 +149,4 @@ async def broadcast_data():
await manager.broadcast(network_data)
except Exception as e:
logger.error(f"Ошибка в broadcast_data:{e}")
await asyncio.sleep(2)
await asyncio.sleep(2)