Source code for zafiaonline.utils.utils

# 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/>.

"""
Copies non-callable attributes of a client object onto itself.

This module provides a utility function for copying all non-callable
attributes from a client's `__dict__` back to the client instance.

Intended for use in dynamic or reflective systems where attribute resetting
or propagation is necessary.
"""
from typing import TYPE_CHECKING, Any

if TYPE_CHECKING:
    from zafiaonline.api_client.user_methods import AuthService


[docs] class Helpers:
[docs] def get_user_attributes(self, auth: "AuthService") -> None: """ Reassigns all non-callable attributes from a client's __dict__ to itself. Args: auth: The client object whose attributes will be reassigned. Returns: None """ for key, value in auth.__dict__.items(): if not callable(value): setattr(auth, key, value)
[docs] async def send_and_get( self, send_func, get_func, request: dict, response_key: str, extract_key: str | None = None, default: Any = None ) -> dict: """Send a request to the server and retrieve structured data. Args: send_func (Callable): Async function to send data to the server. get_func (Callable): Async function to retrieve data from the server. request (dict): The request payload to send. response_key (str): The key used to extract the response block. extract_key (str | None, optional): Specific key inside the response dict to return. If None, the whole dict is returned. Defaults to None. default (Any, optional): Default value if no valid response is found. Defaults to None. Returns: Any: The extracted value, the full dict, or the default if nothing is found. """ await send_func(request) data: dict = await get_func(response_key) if isinstance(data, dict): return data.get(extract_key, data) if extract_key else data return default