Source code for harmonize.connection.pool

from __future__ import annotations

from typing import TYPE_CHECKING, Optional

from harmonize.enums import NodeStatus

if TYPE_CHECKING:
    from harmonize.connection.node import Node

__all__ = (
    "Pool",
)


[docs] class Pool: __nodes: dict[str, Node] = {}
[docs] @classmethod def load_nodes(cls, nodes: list[Node]) -> None: """ Loads multiple nodes into the pool. Parameters ---------- nodes : list[:class:`harmonize.connection.Node`] A list of nodes to load. Returns ------- None """ for node in nodes: cls.load_node(node)
[docs] @classmethod def load_node(cls, node: Node) -> None: """ Loads a single node into the pool. Parameters ---------- node : :class:`harmonize.connection.Node` The node to load into the pool. Returns ------- None """ node.connect() cls.__nodes[node.identifier] = node
[docs] @classmethod def get_nodes(cls) -> list[Node]: """ Retrieves a list of connected nodes from the pool. Returns ------- list[:class:`harmonize.connection.Node`] """ return [ i for i in cls.__nodes.values() if i.status == NodeStatus.CONNECTED ]
[docs] @classmethod def get_node(cls, identifier: str) -> Node: """ Retrieves a node from the pool by its identifier. Parameters ---------- identifier : str The identifier of the node to retrieve. Returns ------- :class:`harmonize.connection.Node` """ return cls.__nodes[identifier]
[docs] @classmethod def get_best_node(cls) -> Optional[Node]: """ Get the best node from the pool based on the number of players. Returns ------- Optional[:class:`harmonize.connection.Node`] """ if cls.get_nodes(): return min(cls.get_nodes(), key=lambda x: len(x.players))
[docs] @classmethod def close_all(cls) -> None: """ Close all the nodes in the pool. Returns ------- None """ for node in cls.get_nodes(): node.close()