Source code for zafiaonline.transport.websocket.config
# SPDX-License-Identifier: GPL-3.0-or-later
# Copyright (C) 2025 unelected
#
# This file is part of the zafiaonline project.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
"""
WebSocket server configuration loader.
This module provides the `Config` class for loading WebSocket server
connection settings from a YAML file. The configuration includes server
address, port, and connection type, with sensible defaults if values
are missing.
Typical usage example:
config = Config()
print(config.address, config.port, config.connect_type)
"""
import yaml
from importlib.resources import files, as_file
[docs]
class Config:
"""
Loads WebSocket server configuration from a YAML file.
Reads settings from a YAML configuration file and assigns them to instance
attributes. If any values are missing, sensible defaults are used.
Attributes:
address (str): WebSocket server hostname or IP. Defaults to "dottap.com".
port (int): WebSocket server port. Defaults to 7091.
connect_type (str): WebSocket protocol ("ws" or "wss"). Defaults to "wss".
"""
def __init__(self, path: str = "ws_config.yaml") -> None:
"""
Initializes the Config instance by loading settings from a YAML file.
Args:
path (str): Path to the YAML configuration file. Defaults to 'ws_config.yaml'.
Raises:
FileNotFoundError: If the YAML file does not exist.
yaml.YAMLError: If the YAML content is malformed.
"""
config_path = files('zafiaonline.transport.websocket').joinpath(path)
with as_file(config_path) as resource_file:
with open(resource_file, "r") as config_file:
config: dict = yaml.safe_load(config_file)
self.address: str = config.get("address", "dottap.com")
self.port: int = config.get("port", 7091)
self.connect_type: str = config.get("connect_type", "wss")